| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 502 人关注过本帖
标题:为什么这程序能求2-100素数?求求大神啊!
只看楼主 加入收藏
c10868
Rank: 1
等 级:新手上路
帖 子:8
专家分:7
注 册:2013-9-5
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
为什么这程序能求2-100素数?求求大神啊!
#include <iostream>            
#include <math.h>               
using namespace std;
const int MAX=100;              //定义常量MAX
int main()
{
    int prime[MAX+100]={0};     //定义变量并初始化   定义prime[200]且里面每个都为0
    int i,j,k=sqrt(MAX);
    for(i=2;i<=k;i++)           //枚举筛数         上行k=10  i就是2到10递增
    {
        if(prime[i]==0)         //这里所有的数组都符合这条件,关键是下面的筛选
        {
            j=i*2;              //将原数扩大二倍初始化给j   这里所有的j都能被i整除不是素数
            do
            {
                prime[j]=1;     //将j筛选掉      把数组里所有下标能被i整除的赋值1 不能整除的还是0      
                j+=i;           //再扩大一倍
            }
            while(j<=MAX);      //循环条件      j是2到100递增
        }
    }
    for(i=2,j=0;i<=MAX;i++)     //                 i是2到100递增
    {
        if(prime[i]==0)        //循环输出       这里把上面不能整除的0的数组的下标输出
        {
            if(j%5==0)         //一行输出5个数
                cout<<"\n";
            cout<<i<<" ";
            j++;
        }
    }
    cout<<endl;
    return 0;                  //这程序经过测试确实能输出2到100的素数(也就是质数)
    }                          //素数就是不能被2到本身的平方根整除


[ 本帖最后由 c10868 于 2013-9-7 00:41 编辑 ]
搜索更多相关主题的帖子: include 
2013-09-06 14:39
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
切,好神奇的筛子...
个人感觉还不如直接除呢...

楼主自己调试一下代码吧...
根据你提的问题,你连基本语法都不懂
我懒得讲...

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-09-06 15:46
c10868
Rank: 1
等 级:新手上路
帖 子:8
专家分:7
注 册:2013-9-5
收藏
得分:0 
这个求素数我可以用好几种方法,但是就是这个看不懂,不知道这是怎么筛出了素数。
重要的不是解决素数问题,是这个程序的思路或它所引用的方法。
如果你能看明白但说不出来,我想你肯定是高手。如果你能看有说出来那你真的是大神了。
当然的我语法不怎么样毕竟我是新手学这没几天,你没有权利更没有议务为我解答我理解。
最后还是希望有大神帮解答,不要求我这新手太懂,一般的人能看懂就行了。
2013-09-06 16:07
c10868
Rank: 1
等 级:新手上路
帖 子:8
专家分:7
注 册:2013-9-5
收藏
得分:0 
最后我会多发几个论坛,希望能找到答案。当然如果确实没有答案,我也不强求。我想只要我一直坚持学下去总有一天会明白的。
2013-09-06 16:11
c10868
Rank: 1
等 级:新手上路
帖 子:8
专家分:7
注 册:2013-9-5
收藏
得分:0 
回复 2楼 peach5460
高手有高手的高傲,我理解.但新手也有新手的执着.
2013-09-06 16:16
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
程序代码,我不跟你讲...自己去看书学习...
算法原理很简单...

比如说100以内的素数,其实除数只用判断到10就可以了,以后的都是重复的
然后从n开始...每次加n...这样就可以剔除掉n*2...n*3...n*4这种非素数...
然后将n从1循环到MAX的开方,这样就把所有的非素数全部剔除干净了
那剩下的就全部都是素数...

原理就是一遍遍的过筛子...把不是素数的全部筛干净
剩下的就是素数了...
但是这种方法效率很低...

[ 本帖最后由 peach5460 于 2013-9-6 17:06 编辑 ]

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-09-06 17:05
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:20 
以下是引用c10868在2013-9-6 16:16:38的发言:

高手有高手的高傲,我理解.但新手也有新手的执着.

我不是骄傲,我是觉得你基础太差,连个数组都看不懂,怎么跟你讲
就好像小学生来问我微积分...这如何讲起...你这不是难为我吗?

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-09-06 17:07
c10868
Rank: 1
等 级:新手上路
帖 子:8
专家分:7
注 册:2013-9-5
收藏
得分:0 
基本明白,谢谢大神解答。
2013-09-06 18:23
快速回复:为什么这程序能求2-100素数?求求大神啊!
数据加载中...
 
   



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

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