第七題(最小的質數):
# include
int main ()
{
int num = 0;
int divisor= 0;
int remainder= 0;
int answer= 0;
scanf (”%d”, &num);
while (answer== 0)
{
num ++;
divisor= 2;
remainder= 1;
while ( 0!= remainder && num!= divisor)
{
remainder= (num%divisor);
divisor++ ;
} // end while
if (num == divisor)
answer= num;
} // end while
printf (”%dn”, answer);
return 0;
} // end main ()
第八題(兩數之間有幾個質數?):
# include
int main ()
{
int num1= 0; // 找到的質數
int num2= 0;
int divisor= 0; // 除數
int remainder= 0; // 找質數過程中所需的餘數
int numnum= 0;
scanf (”%d”, &num1);
scanf (”%d”, &num2);
while (num1<= num2) // 只找到limit
{
remainder= 1; //為了先給下面的while有數字可以驗證,先在此指定remainder的數
divisor= 2;
while (0!= remainder&& num1 != divisor) //檢查這個數是不是質數 {
remainder= (num1%divisor);
divisor= (divisor+1);
} // end while
if (0== remainder) // 如果此數是因為餘數為0而跳出迴圈
num1++ ; // 輸入下個數(但這個數不是質數)
else // 剩下的數就是質數
{
numnum ++;
num1= (num1+1); // 輸入下個數
} // end else
} // end while
printf (”%dn”, numnum);
return 0;
}// end main ()
第九題(有幾個質因數?):
# include
int main ()
{
int num= 0;
int divisor= 0; // 除數
int remainder= 0; // 過程中所需的餘數
int numnum= 0;
int remainder2= 0;
int divisor2= 0;
scanf (”%d”, &num);
remainder= 1; //為了先給下面的while有數字可以驗證,先在此指定remainder的數
divisor= 2;
while ( num >= divisor)
{
remainder= (num%divisor);
if (remainder== 0)
{
divisor2= 2; remainder2= 1;
while (0!= remainder2 && divisor != divisor2)
{
remainder2= (divisor%divisor2);
divisor2 ++ ;
} // end while
if (divisor== divisor2)
numnum ++ ;
} // end if
divisor ++ ;
} // end while
numnum ++;
printf (”%dn”, numnum);
return 0;
}// end main ()
註:先找到這個數的因數,再檢驗這個因數是不是質數。都是的話,numnum+1。
第十題(因數分解):
# include
int main ()
{
int num= 0;
int test= 0;
scanf (”%d”, &num);
test= 2;
while (num>1)
{
if (0 == num%test )
printf (”%dn”, test);
while (0 == num%test) // 萬一這個質因數有相同的,例如2、2,就把它全部除掉,這樣接下去就不會檢驗到這個因數了。
num= num/test;
test ++;
} // end while
return 0;
} // end main
註:
蝦密(又)!?怎麼這麼少?對,就這麼少。既然程式碼這麼少,那我註解就寫多一點吧。事實上,在這題我利用小學教的因式分解短除法來做的,其要點就是「找到一個質因數後,將原數用質因數除掉」,如此可以減少程式碼的複雜和runtime,且找到的必為質因數(不是質數的因數都先被除掉了)。
第十一題(有幾個質數?):
# include
int main ()
{
int num= 0;
int remainder= 0;
int divisor= 0;
int numnum= 0;
scanf (”%d”, &num);
while (num!= -1)
{
if (num== 1)
numnum ++ ;
else
{
divisor=2;
remainder= 1;
while (0!= remainder && num != divisor) //檢查這個數是不是質數
{
remainder= (num%divisor);
divisor ++ ;
} // end while
if (0 == remainder )
;
else
numnum ++;
} // end else
scanf (”%d”, &num);
} // end while
printf (”%dn”, numnum);
return 0;
} // end main
心得:
這星期的CAL有點欠缺挑戰性...大家說是不是阿~~(是~~)
文章定位:
人氣(129) | 回應(1)| 推薦 (
0)| 收藏 (
0)|
轉寄
全站分類:
不分類