标题:求素数的另类方法
取消只看楼主
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1728
专家分:3216
注 册:2015-12-2
结帖率:100%
已结贴  问题点数:20 回复次数:2 
求素数的另类方法
基本思路是先设某个范围内所有数全为素数。
然后从最小素数的倍数开始去除合数,然后从第二小的素数倍数去除合数,直
至所有合数去除完成。
这种求素数方法效率相当高,我试了一下求100以内的素数只须跑4次循环,
求1000以内的素数只须跑11次。
不多说贴代码:
#include <stdio.h>
#define MAXNUM 1000
main ()
{
    int prime[MAXNUM];            //记录数据类型,1为素数,0为合数
    int i,j,c=0,count=0;
    for( i=2;i<MAXNUM;i++)
    {
        prime[i]=1;                //初始化数组
    }
    for(i=2;i*i<MAXNUM;i++)
    {
        if(prime[i]==1)         
        {
            for(j=i*2;j<MAXNUM;j++)
            {
                if(!prime[j])continue;
                if(j%i==0)prime[j]=0;     //是合数置0
            }
        count++;   
        }
     }
     for(i=2;i<MAXNUM;i++)
     {
         if(prime[i]==1)
         {
             c++;
             printf("%2d ",i);
             if(c%10==0)
             printf("\n");
         }
         
         
     }
     printf("\n走了%d次循环",count);
}
搜索更多相关主题的帖子: 素数 类方法 count for i++ 
2018-09-01 19:13
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1728
专家分:3216
注 册:2015-12-2
得分:0 
回复 3楼 九转星河
比欧拉筛如何?
2018-09-01 19:32
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1728
专家分:3216
注 册:2015-12-2
得分:0 
回复 5楼 九转星河
加了什么代码?
你确认会重复遍历?
举个栗子!
2018-09-01 21:21



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-489575-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.473208 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved