2015年4月30日 星期四
[php] 列出 1~100 質數並加總
1.原理: 100 = 10*10,所以只要驗證10以內的質因數即可
2.利用常數限定數值範圍
3.計算質數總和
<?php
$number = 0;
$sum = 0;
define("MAX","100");
define("MIN", "1");
echo "This is homework for php done by Anne on April 29.<br/>";
do{
if ( $number > MIN ){
switch ($number){
case 2:
case 3:
case 5:
case 7:
echo $number." is prime <br/>";
$sum += $number;
break;
default:
if( $number % 2 !=0 ){
if ($number % 3 !=0){
if ($number % 5 !=0){
if ($number % 7 !=0){
echo $number." is prime<br/>";
$sum += $number;
}
}
}
}
break;
}
}
$number ++;
}while( $number < MAX);
echo "Sum of the primes =".$sum;
?>
訂閱:
張貼留言 (Atom)
提供兩個建議:
回覆刪除一、按原版主演算法,素數 [2,3,5,7] 應以
陣列迴圈計算為佳,這樣才有通用性,
將來若 100 改為 1000 時,
巢狀條件式寫起來才不會嚇死人。
二、檢查是否與 [2,3,5,7] 互素,
可以使用輾轉相除法,與 210 互輾:
function eodiv($x)
{
var $y = 210;
while(($x%=$y)&&($y%=$x));
return ($x+$y);
}
若是 eodiv($n) 不為零,
代表含有 2,3,5,7 至少一個因子。
利用第一個建議,換了一種寫法,這樣子果然擴充性增加很多,感謝您!!
刪除http://anne-notes.blogspot.tw/2015/07/c-1100.html
第二個建議我要再想一下,果然數學可以讓程式碼簡化許多。