求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);
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM