1. 程式人生 > >求1000以內的質數c語言

求1000以內的質數c語言

之前在做求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); }