| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 230 人关注过本帖
标题:求高手解答
只看楼主 加入收藏
zhou31146001
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:303
专家分:131
注 册:2012-11-28
结帖率:93.94%
收藏
已结贴  问题点数:20 回复次数:5 
求高手解答
#include <stdio.h>
#include <math.h>
int is_p(int x)   
{
int i;
if(x<2)
return 0;
for(i=2;i<=sqrt(x);i++)  
if(x%i==0)  
return 0;
return 1;
}
int main()
{
int n;   
while(scanf("%d",&n)!=EOF)
{  
if(is_p(n))
printf("YES\n");  
else
printf("NO\n");
}
return 0;   
}
其中下面这一段怎么理解
for(i=2;i<=sqrt(x);i++)  
if(x%i==0)  
return 0;
return 1;
搜索更多相关主题的帖子: include 
2012-11-29 11:42
Fisher~
Rank: 4
等 级:业余侠客
帖 子:93
专家分:222
注 册:2012-11-10
收藏
得分:0 
你这个应该是求素数的把你后面写错了应该是
for(i=2;i<=sqrt(x);i++)  
    if(x%i==0)          // 不是素数
        return 0;
    else
        return 1;           // 是素数
如果x在他的算术平方根里面没有约数那么在比他算术平方根大的数比他本身小的数里面就绝对没有所以只需要判断到他的最大平方跟就行了,
因为一个数的最大约数为他的算术平方跟
比如5的最大算术平方根不超过3那么比较到2就行了
x%i是求余运算,如果没有余数证明i是x的一个约数就不是素数返回0
2012-11-29 12:25
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 2楼 Fisher~
像你这么写才是错的

总有那身价贱的人给作业贴回复完整的代码
2012-11-29 12:34
Fisher~
Rank: 4
等 级:业余侠客
帖 子:93
专家分:222
注 册:2012-11-10
收藏
得分:20 
嗯我看错了上面有个循环,你原本写的是对的理解就是循环里面要是有余数为0的情况证明有约数就返回0部是素数,如果循环结束还没有约数那么就返回1是素数不好意思
收到的鲜花
  • zhou311460012012-11-30 15:48 送鲜花  3朵   附言:赞同
2012-11-29 12:57
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
2楼说的的确不对
for(i=2;i<=sqrt(x);i++)  
if(x%i==0)  
return 0;
return 1;




return 1;不是for的循环体。
这段代码我认为应该这样理解:每次i自增后如果能模x模尽,则执行return 0;返回0,并结束函数;如果到i=sqrt(x),仍不能摸尽,则执行return 1;返回1并结束函数。
收到的鲜花

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-11-29 13:01
zhou31146001
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:303
专家分:131
注 册:2012-11-28
收藏
得分:0 
回复 2楼 Fisher~
我这么改过,但结果输出的就不对了,不知为什么
2012-11-30 15:40
快速回复:求高手解答
数据加载中...
 
   



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

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