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;
?>

2 則留言:

  1. 提供兩個建議:

    一、按原版主演算法,素數 [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 至少一個因子。

    回覆刪除
    回覆
    1. 利用第一個建議,換了一種寫法,這樣子果然擴充性增加很多,感謝您!!
      http://anne-notes.blogspot.tw/2015/07/c-1100.html
      第二個建議我要再想一下,果然數學可以讓程式碼簡化許多。

      刪除