zoukankan      html  css  js  c++  java
  • 求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
    ",prime[i]);
        }
        printf("乘除运算的次数为:%lu
    ",counter);
        return(0);
    }
  • 相关阅读:
    [国家集训队] Crash 的文明世界
    [国家集训队] middle
    [正睿集训2021] 构造专练
    [正睿集训2021] LIS
    CF482E ELCA
    UVA
    UVA
    UVA
    UVA
    UVA
  • 原文地址:https://www.cnblogs.com/Guhongying/p/9975552.html
Copyright © 2011-2022 走看看