C語言輸出素數表(1-100)&前100個
阿新 • • 發佈:2019-02-13
本來是想第二篇做雙鏈表的,今天看C和指標第四章,複習了以下之前做的素數輸出,三種不同方法,結果如下:
1.輸出1-100以內的素數:
//這個比較簡單,不多做介紹,唯一注意的一點是for迴圈截止條件是i<sqrt(n),因為對於一個整數n,其是否為素數,在所有小於其平方根的數已經判斷完畢,沒必要再增加工作量判斷到n-1; #include<stdio.h> #include<math.h> int main() { int n; int i; int flag=0; for(n=2;n<=100;n++) { flag=0; for(i=2;i<=sqrt(n);i++) { if(n%i==0) { flag=1; break; } } if(flag==0) printf("%d ",n); } return 0; }
2.同樣,也是輸出1-100以內的素數,這個構造一個數組,將其所有元素初始化為1,表示素數,這時取x從2開始,到100以內做迴圈,若x為素數,即prime[x]!=0,使得每個i*x位置元素置0(prime[i*x]=0),表示為非素數,迴圈結束前x+1。
#include<stdio.h> int main() { int prime[100]; int i; for(i=0;i<100;i++) prime[i]=1; int x=2; while(x<100) //是每一個數 x*i x=2->100 { for(i=2;i*x<100;i++) { if(prime[x]) { prime[i*x]=0; } } x++; } for(i=2;i<100;i++) { if(prime[i]) printf("%d ",i); } return 0; }
3.該方法是輸出100個素數,基本思想是構造一個素數表,利用函式判斷每個數是否能被其之前的素數整除,如果不能,則在素數表內加上該元素,不斷迴圈(while迴圈結束條件是cnt即陣列個數>100)。
#include<stdio.h> int isprime(int n,int prime[],int maxnumber); int main() { int prime[100]={2,}; //構造素數表,共100個元素,初始化第一個為2,已知為素數;其餘自動為0; int cnt=1; //計數; //int count=0; int i=3; //從3開始; while(cnt<=100) //cnt是陣列現有素數個數 { if(isprime(i,prime,cnt)) //判斷i是否為素數 { prime[cnt++]=i; //如果是記錄到陣列中,下標加1; } i++; //下一個數 } for(i=0;i<100;i++) { if(i%10==0 && i!=0) putchar('\n'); printf("%5d",prime[i]); } return 0; } int isprime(int n,int prime[],int maxnumber) { int i; for(i=0;i<maxnumber;i++) { if(n%prime[i]==0) //判斷能否被素數表中的數整除,如果能,則不是素數 return 0; } return 1; }