2.利用常數限定數值範圍
3.計算質數總和
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #define MAX 100 #define MIN 1 int main(void){ int root=sqrt(MAX); //sqrt():計算平方根,亦可使用pow(MAX,0.5) int prime[root]; //用來存放質因數for檢驗100以內的其他質因數 int is_prime=1; //bool變數,1表示true,0表示false int count,num,i,j,k,l=0,sum=0; //create the array of prime,找出10以內的質因數 prime[0]=2; //先將2放入質因數陣列當中 count=1; //計算10以內的質因數個數 for(num=3;num<root;num+=2){ //偶數必為2的倍數,所以檢查奇數即可 is_prime=1; for(i=2;i<num;i++){ if(num%i==0){ is_prime=0; //有1與本身之外的其他因數,所以不是質數。 break; } } if(is_prime){ prime[count]=num; //抓出作為檢查標準的質因數 count++; } } //for(j=0;j<count;j++) printf("[%d~%d]:%d is prime (%d)\n",MIN,MAX,prime[j],count); //find the prime for(j=2;j<=MAX;j++){ is_prime=1; for(k=0;k<count;k++){ if( j%prime[k]==0 && j!=prime[k] ){ //為了將作為檢查標準的質因數放入 is_prime=0; break; } } if(is_prime){ l++; //計算1~100以內的質數個數 sum+=j; printf("%d.[%d~%d]:%d is prime.\n",l,MIN,MAX,j); } } printf("[%d~%d]:the sum of prime is %d\n",MIN,MAX,sum); system("pause"); return 0; }
作者已經移除這則留言。
回覆刪除這裡又不得不建議一下,事實上要做素數列表,目前大多都是用「埃氏篩」(埃拉托斯特尼篩法,希臘語:κόσκινον Ἐρατοσθένους)或其變形。在 C 語言用「埃氏篩」,計算上連乘除、餘數計算都用不上,速度飛快。
回覆刪除提醒一下:使用埃氏篩時,例如要篩5的倍數,從 5x5=25 開始篩就行了、5x6=30也不用篩,因為只要篩裡面剩餘的倍數就行了,因此使用埃氏篩也能夠很快知道 11 的倍數不用篩,因此篩到 7 就停了,因此平方根計算也根本用不上,真的很棒!
作者已經移除這則留言。
回覆刪除作者已經移除這則留言。
回覆刪除