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

 

posted @ 2018-11-17 20:50  一去二三浪里小白龙  阅读(3922)  评论(0编辑  收藏  举报
//增加一段JS脚本,为目录生成使用