<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- MyFirstUnitAd -->
<ins class="adsbygoogle"
     style="display:inline-block;width:970px;height:250px"
     data-ad-client="ca-pub-5778386704669218"
     data-ad-slot="1503492166"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>



<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document"><title>Naughty</title></head><body>



<p align="left"><span lang="en-ca"><font color="#ff0000" size="6"><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
Naughty Boys Try Multiplication</b></font></span></p>

<div align="left">
  <pre><b><font color="#ff0000" size="5">A. <span lang="en-ca">First</span> Edition</font></b></pre>
</div>
<div align="left">
  <pre><span lang="en-ca"><b>This is a small puzzle and it is a small practice for backtrack algorithm which I would always like to call </b></span></pre>
</div>
<div align="left">
  <pre><span lang="en-ca"><b>as DFS. </b></span></pre>
</div>
<div align="left">
  <pre><b><font color="#ff0000" size="5"><span lang="en-ca">B</span>.<span lang="en-ca"><a name="problem"></a>The problem</span></font></b></pre>
</div>
<div align="left">
  <font face="TimesNewRomanPSMT">
  <p align="left"><span lang="en-ca"><b>Do you like small games? Here it is an 
  interesting one.</b></span></p>
  <p align="left"><span lang="en-ca"><b>Two boys are given 99 balloons with a 
  distinct number between 1 to 99 on each of them. That is, </b></span></p>
  <p align="left"><span lang="en-ca"><b>each number between 1 to 99 will appear 
  once and only once on any of these 99 balloons. Then the </b></span></p>
  <p align="left"><span lang="en-ca"><b>two boys are given several minutes to 
  try to destroy these balloons. Whichever the balloon each boy</b></span></p>
  <p align="left"><span lang="en-ca"><b>destroy, he will try to remember its 
  number. Ironically, these two boys are genius of maths who </b></span></p>
  <p align="left"><span lang="en-ca"><b>will only be able to remember number by 
  multiply it with previous result. That means, if boy Peter</b></span></p>
  <p align="left"><span lang="en-ca"><b>destroyed balloon with numbers of 2, 19, 
  20, 50 and 80, what he remembered is </b></span></p>
  <p align="left"><span lang="en-ca"><b>2x19x20x50x80=3040000.</b></span></p>
  <p align="left"><span lang="en-ca"><b>Of course the two little boys cannot 
  destroy all the 99 balloons. Some of them will surely fly</b></span></p>
  <p align="left"><span lang="en-ca"><b>away. When time is up, you will ask them 
  how many balloons they have destroyed each. The two </b></span></p>
  <p align="left"><span lang="en-ca"><b>naughty boys would give you the multiply 
  result of his memory. You are the judge to tell whether </b></span></p>
  <p align="left"><span lang="en-ca"><b>they are kidding you with some 
  impossible numbers. For example, it is impossible for two boys to </b></span>
  </p>
  <p align="left"><span lang="en-ca"><b>give answers of 134 and 201 because 134 
  = 2x67 and 201 =3x67 and they cannot destroy no.67 balloon</b></span></p>
  <p align="left"><span lang="en-ca"><b>at the same time. You can assume that 
  these two boys are so extremely clever that unless you spot</b></span></p>
  <p align="left"><span lang="en-ca"><b>the impossible number combination like 
  above, they can always explain themselves by possible way</b></span></p>
  <p align="left"><span lang="en-ca"><b>of multiplication as long as there is no 
  contradiction between them. So, the only way to make sure</b></span></p>
  <p align="left"><span lang="en-ca"><b>they are not cheating you is to make 
  sure you find out the all possible combinations of factors of </b></span></p>
  <p align="left"><span lang="en-ca"><b>two reported number. Only if you try all 
  possible multiply factors for two numbers and make sure </b></span></p>
  <p align="left"><span lang="en-ca"><b>each combination of factors of two 
  numbers has some common factors, can you proudly declare that</b></span></p>
  <p align="left"><span lang="en-ca"><b>the naughty boys are kidding with you. 
  Otherwise, do reward them with some candies for their </b></span></p>
  <p align="left"><span lang="en-ca"><b>cleverness in maths.</b></span></p>
  <p align="left"><span lang="en-ca"><b>That is: </b></span></p>
  <p align="left"><span lang="en-ca"><b>number1=Pfactor_1 x Pfactor_2 x ... 
  Pfactor_n&nbsp; and for all n factors, they are distinct and &lt;=99</b></span></p>
  <p align="left"><span lang="en-ca"><b>number2=Qfactor_1 x Qfactor_2 x ... 
  Qfactor_m&nbsp; and for all m factors, they are distinct and &lt;=99</b></span></p>
  <p align="left"><span lang="en-ca"><b>And for all n Pfactors has no common one 
  with all m Qfactors.</b></span></p>
  <p align="left">　</p>
  <p align="left"><span lang="en-ca"><b>Are you bored till now?</b></span></p>
  </font>
  <p align="left">　</p></div>
<div align="left">
  <b><font color="#ff0000" size="5"><span lang="en-ca"><a name="explain"></a>C</span>.<span lang="en-ca">The
  </span></font></b><span lang="en-ca"><font color="#ff0000" size="5"><b>idea of 
  program</b></font></span></div>
<div align="left">
  　</div>
<div align="left">
  <pre><span lang="en-ca"><b><font face="TimesNewRomanPSMT">It is a typical searching problem with backtrack algorithm or DFS, if you want to call it my way. The greedy</font></b></span></pre>
</div>
<div align="left">
  <pre><span lang="en-ca"><b><font face="TimesNewRomanPSMT">algorithm simply won't work.</font></b></span></pre>
</div>
<div align="left">
  <pre><b><font color="#ff0000" size="5">D.<span lang="en-ca"><a name="Method"></a>The </span>major functions</font></b></pre>
</div>
<div align="left">
  <pre>　</pre>
</div>
<div align="left">
  <pre>　</pre>
</div>
<div align="left">
  <pre><b><font color="#ff0000" size="5"><span lang="en-ca">E</span>.</font></b><span lang="en-ca"><font color="#ff0000" size="5"><b>Further improvement</b></font></span></pre>
</div>
<div align="left">
  <pre><b><span lang="en-ca">It is a small game and no one would bother to treat them seriously, I presume.</span></b></pre>
</div>
<div align="left">
  <pre><b><font color="#ff0000" size="5"><span lang="en-ca">F</span>.</font></b><span lang="en-ca"><font color="#ff0000" size="5"><b>File listing</b></font></span></pre>
</div><span style="font-family: monospace;"><span style="font-weight: bold;"><br>
<br>
1. Naughty.cpp(main)<br>
<br>
file name: naughty.cpp<br>
<br>
#include &lt;stdio.h&gt;<br>
#include &lt;stdlib.h&gt;<br>
#include &lt;time.h&gt;<br>
<br>
<br>
const int MaxNumber=100;<br>
const int MaxFactorNumber=5;<br>
const int MinFactorNumber=2;<br>
<br>
int bigCount=0;<br>
int smallCount=0;<br>
int bigNumbers[MaxFactorNumber*20];<br>
int smallNumbers[MaxFactorNumber*20];<br>
<br>
bool tested[MaxNumber]={false};<br>
<br>
bool findFactor(int divider, int start, int&amp; divisor);<br>
<br>
bool backTrack(int small, int big);<br>
<br>
void initialize();<br>
<br>
void display(int big, int small);<br>
<br>
int randNumber(int includes);<br>
<br>
int main()<br>
{<br>
&nbsp;&nbsp;&nbsp; int small, big;<br>
&nbsp;&nbsp;&nbsp; int includes=1;<br>
&nbsp;&nbsp;&nbsp; srand(time(0));<br>
&nbsp;&nbsp;&nbsp; initialize();<br>
&nbsp;&nbsp;&nbsp; small=randNumber(includes);<br>
&nbsp;&nbsp;&nbsp; big=randNumber(includes);<br>
&nbsp;&nbsp;&nbsp; printf("MaxFactorNumber= %d and includes = %d\n", MaxFactorNumber, includes);<br>
&nbsp;&nbsp;&nbsp; if (backTrack(small, big))<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; display(small, big);<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; else<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf("no result\n");<br>
&nbsp;&nbsp;&nbsp; }<br>
<br>
<br>
&nbsp;&nbsp;&nbsp; return 0;<br>
}<br>
<br>
int randNumber(int includes)<br>
{<br>
&nbsp;&nbsp;&nbsp; //make sure the factor number is in between the max and min<br>
&nbsp;&nbsp;&nbsp; int count=rand()%(MaxFactorNumber-MinFactorNumber)+MinFactorNumber;<br>
&nbsp;&nbsp;&nbsp; int result=includes;<br>
&nbsp;&nbsp;&nbsp; int number;<br>
&nbsp;&nbsp;&nbsp; for (int i=0; i&lt;count; i++)<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //make sure factors are among 1--99<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; number=rand()%(MaxNumber-1) +1;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; result*=number;//since we don't want 0<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; return result;<br>
}<br>
<br>
<br>
void doDisplay(int array[], int numbers)<br>
{<br>
&nbsp;&nbsp;&nbsp; for (int i=0; i&lt;numbers; i++)<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (i!=numbers-1)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf("%d x ", array[i]);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; else<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf(" %d\n", array[i]);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; }<br>
}<br>
<br>
<br>
<br>
void display(int small, int big)<br>
{<br>
&nbsp;&nbsp;&nbsp; void doDisplay(int array[], int numbers);<br>
<br>
&nbsp;&nbsp;&nbsp; printf("the big number %d has %d factors:", big, bigCount);<br>
&nbsp;&nbsp;&nbsp; doDisplay(bigNumbers, bigCount);<br>
&nbsp;&nbsp;&nbsp; printf("the small number %d has %d factors:", small, smallCount);<br>
&nbsp;&nbsp;&nbsp; doDisplay(smallNumbers, smallCount);<br>
}<br>
<br>
<br>
void initialize()<br>
{<br>
&nbsp;&nbsp;&nbsp; smallCount=bigCount=0;<br>
&nbsp;&nbsp;&nbsp; for (int i=0; i&lt;MaxNumber; i++)<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; tested[i]=false;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; }<br>
}<br>
<br>
bool findFactor(int divider, int start, int&amp; divisor)<br>
{<br>
&nbsp;&nbsp;&nbsp; int boundary=divider/start;<br>
&nbsp;&nbsp;&nbsp; if (boundary&gt;MaxNumber)<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; boundary=MaxNumber;<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; for (int i=start; i&lt;boundary; i++)<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (!tested[i])<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (divider%i==0)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; divisor=i;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return true;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; return false;<br>
}<br>
<br>
bool backTrack(int small, int big )<br>
{<br>
&nbsp;&nbsp;&nbsp; int smallFactor, bigFactor;<br>
&nbsp;&nbsp;&nbsp; int smallStart=2, bigStart=2;<br>
&nbsp;&nbsp;&nbsp; if (small&lt;MaxNumber&amp;&amp;big&lt;MaxNumber)//reach a solution<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (small!=big&amp;&amp;!tested[small]&amp;&amp;!tested[big])//if they are brand new<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; bigNumbers[bigCount++]=big;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; smallNumbers[smallCount++]=small;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return true;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; while (findFactor(small, smallStart, smallFactor))<br>
&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; tested[smallFactor]=true;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; smallNumbers[smallCount++]=smallFactor;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; bigStart=2;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; while&nbsp; (findFactor(big, bigStart, bigFactor))<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; tested[bigFactor]=true;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; bigNumbers[bigCount++]=bigFactor;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (!backTrack(small/smallFactor, big/bigFactor))<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; tested[bigFactor]=false;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; bigCount--;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; bigStart=bigFactor+1;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; else<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return true;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; tested[smallFactor]=false;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; smallCount--;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; smallStart=smallFactor+1;&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; return false;<br>
}<br>
<br>
<br>
The result is like following</span></span><span lang="en-ca"><font color="#0000ff"><b>:</b></font></span>

<pre><span lang="en-ca"><font color="#0000ff"><b>I will show you some results by changing the constant "MaxFactorNumber" and </b></font></span></pre>

<pre><span lang="en-ca"><font color="#0000ff"><b>deliberately "includes" common factors at function "randNumber(includes)",</b></font></span></pre>

<pre><span lang="en-ca">MaxFactorNumber= 4 and includes = 34<br>the big number 9089424 has 5 factors:3 x 6 x 136 x 47 x 79<br>the small number 174080 has 5 factors:2 x 4 x 5 x 64 x 68<br>Press any key to continue</span></pre>

<pre>　</pre>

<pre><span lang="en-ca">MaxFactorNumber= 4 and includes = 34<br>the big number 47124 has 4 factors:3 x 6 x 34 x 77<br>the small number 105774 has 4 factors:2 x 17 x 51 x 61<br>Press any key to continue</span></pre>

<pre>　</pre>

<pre><span lang="en-ca">MaxFactorNumber= 4 and includes = 1<br>the big number 533120 has 3 factors:64 x 85 x 98<br>the small number 3483 has 3 factors:3 x 27 x 43<br>Press any key to continue</span></pre>

<pre>　</pre>

<pre><span lang="en-ca">MaxFactorNumber= 5 and includes = 1<br>the big number 2156 has 2 factors:22 x 98<br>the small number 27 has 2 factors:3 x 9<br>Press any key to continue</span></pre>

<pre>　</pre>

<pre><span lang="en-ca">MaxFactorNumber= 5 and includes = 1<br>the big number 180950 has 5 factors:5 x 7 x 10 x 11 x 47<br>the small number 22670928 has 5 factors:2 x 17 x 81 x 84 x 98<br>Press any key to continue</span></pre>

<pre><span lang="en-ca">MaxFactorNumber= 5 and includes = 1<br>the big number 1462 has 3 factors:2 x 17 x 43<br>the small number 57564 has 3 factors:9 x 78 x 82<br>Press any key to continue			</span></pre>

<pre><span lang="en-ca">				</span> <a href="game24.htm"><img src="picture/back.gif" style="border: medium none ;" alt="back.gif (341 bytes)" height="35" width="32"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="index.htm"><img src="picture/up.gif" style="border: medium none ;" alt="up.gif (335 bytes)" height="32" width="35"></a> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img src="picture/next.gif" style="border: medium none ;" alt="next.gif (337 bytes)" height="35" width="32"> </pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;</p>

</body></html>