| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6263 人关注过本帖
标题:求素数时,为什么非要开根号?
只看楼主 加入收藏
wcmk21
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2013-3-17
结帖率:100%
收藏
已结贴  问题点数:2 回复次数:7 
求素数时,为什么非要开根号?
例题:计算并输出1000以内最大的10个素数以及它们的和。
  要求:
  (1)在程序内部加必要的注释。
  (2)由于偶数不是素数,可以不考虑对偶数的处理。
(3)虽然在1000以内的素数超过10个,但是要对1000以内不够10个素数的情况进行处理。
   (4) 输出形式为:素数1+素数2+素数+…+素数10=总和值。
我编的代码是:
   #include <iostream>
   #include<cmath>
     using namespace std;
   int main()
   {
   
       int i,k,a[10],j=0,sum=0,n=999;
       for( ;n>1;n-=2)
       {
           k=1;                 /k用来标记数,n为素数时k=1,否则k=0
           for(i=2;i<sqrt(n);i++)
           {
               if(n%i==0)
                   {k=0;break;}
           }
           if(k)
           {
               a[j]=n;
               j++;    //将素数赋给数组a[10],并用j(j<=10)标记素数个数
           }
           if(j==10)
               break;  //当数组中素数个数达到10时,跳出循环,不再计算其他素数
   
       }
   
       for(i=0;i<j;i++)
           sum+=a[i];   //计算数组中j(j<=10)个素数的和
       cout<<a[0];
       for(i=1;i<j;i++)
       cout<<"+"<<a[i];
       cout<<"="<<sum<<endl;
       return 0;
   }
如果将第十行:for(i=2;i<=sqrt(n);i++)改为:for(i=0;i<=n;i++)就会漏掉961,我想不通为什么,开根号不是为了简化计算吗?还是说,我写的代码有问题?请教大家,谢谢!
搜索更多相关主题的帖子: 最大的 include 
2013-04-06 18:54
wcmk21
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2013-3-17
收藏
得分:0 
抱歉,第九行漏掉一个“/”
2013-04-06 18:58
wcmk21
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2013-3-17
收藏
得分:0 
我太马虎了,如果将第十行:for(i=2;i<=sqrt(n);i++)改为:for(i=2;i<=n;i++)就会漏掉961,开根号不是为了简化计算吗?还是说,我写的代码有问题?请教大家,谢谢!
2013-04-06 19:01
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:2 
因为求素数的话,其实就是判断是否能被除了1和自身的其他数整除嘛...

比如100开根号是10
其实你的循环过了10以后,找到的都是重复的数...
比如说你循环到20...100/20=5
其实当你循环到5的时候,就已经能整除了
明白?

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-04-06 19:06
wcmk21
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2013-3-17
收藏
得分:0 
回复 3楼 wcmk21
可是,为什么会漏掉一个数961呢?
2013-04-06 19:11
wcmk21
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2013-3-17
收藏
得分:0 
我的代码好像本身就有问题,请求帮忙!
2013-04-06 19:23
wcmk21
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2013-3-17
收藏
得分:0 
我明白了,我在IDE里时候是for(i=2;i<sqrt(n);i++),应该是“i<=sqrt(n)”,漏了个“=”麻烦大家,我还是太马虎。961不是素数
2013-04-06 19:30
wcmk21
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2013-3-17
收藏
得分:0 
向前来帮忙的前辈致敬!尤其是peach5460,谢谢!
2013-04-06 19:32
快速回复:求素数时,为什么非要开根号?
数据加载中...
 
   



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

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