| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1879 人关注过本帖
标题:求素数的另类方法
取消只看楼主 加入收藏
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1744
专家分: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
帖 子:1744
专家分:3216
注 册:2015-12-2
收藏
得分:0 
回复 3楼 九转星河
比欧拉筛如何?
2018-09-01 19:32
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1744
专家分:3216
注 册:2015-12-2
收藏
得分:0 
回复 5楼 九转星河
加了什么代码?
你确认会重复遍历?
举个栗子!
2018-09-01 21:21
快速回复:求素数的另类方法
数据加载中...
 
   



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

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