求1000以內的質數c語言
阿新 • • 發佈:2018-11-19
之前在做求1000以內的質數的時候,我們一般能想到的就是從3~(根號)no,逐一和no除,如果存在某個i使得 i|no成立的話,說明no不是質數(“i|no”是i整除除no的意思);
在《明解c語言》上看到了一種與相似,但運算次數比其還少的。
#include <stdio.h> int main(void) { int i,no; int prime[500]; int ptr=0; unsigned long counter=0; prime[ptr++]=2; //這裡是prime[0]=2,然後ptr再加加 prime[ptr++]=3; for(no=5;no<1000;no+=2) { int flag=0; for(i=1;counter++,prime[i]*prime[i]<=no;i++) //counter++是因為接下來的prime[i]*prime[i]要作一次乘法運算,這樣一來那麼no除的只是小於根號no的的質數 { counter++; if(no%prime[i]==0) { flag=1; break; } } if(!flag) //flag=1,說明no並不是質數,反之no為質數 { prime[ptr++]=no; } } for(i=0;i<ptr;i++) { printf("%d\n",prime[i]); } printf("乘除運算的次數為:%lu\n",counter); return(0); }