| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5376 人关注过本帖
标题:简单的for循环求素数问题。
只看楼主 加入收藏
人莫予毒
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2010-12-20
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:8 
简单的for循环求素数问题。
刚刚自学,这个程序只输出2求教原因?改成后面那个可以输出,但我不太了解C语言,想问下(i=2;i<n&&n%i==0;i++)这个不行么?

#include<stdio.h>
void main()
{
long i,n;
for(n=2;n<=327;n++)
{
for(i=2;i<n&&n%i==0;i++)改成这样可以输出for(i=2;i<=n;i++)  
   if(n==i)                             if(n%i==0) break;
   printf("%d\t",n);                    if(i==n)
                                        printf("%d\t",n);
   }                         

}

[ 本帖最后由 人莫予毒 于 2010-12-20 11:48 编辑 ]
搜索更多相关主题的帖子: long void include C语言 
2010-12-20 11:39
venus85
Rank: 6Rank: 6
等 级:侠之大者
帖 子:159
专家分:477
注 册:2010-11-27
收藏
得分:3 
(i=2;i<n&&n%i==0;i++)
这样不行的,你只要n%i不满足,for循环就结束了
i=3,内层for循环就结束了,再回到外层循环n=3,n%i又不满足
有回到外层循环n=4,for循环满足,(n==i)会打印出4.之后就会打印出6,8,10 等等
你这就变成求偶数了。
你的内层for循环只在n为偶数时执行。
你还有语法错误,自己在仔细瞅瞅!
2010-12-20 12:30
miaozhen
Rank: 1
等 级:新手上路
帖 子:1
专家分:3
注 册:2010-12-15
收藏
得分:3 
这个是不行的。(i=2;i<n&&n%i==0;i++)
这样循环就是过早结束了
意思是只有当n%i==0时循环才继续
还有 i=2与I<n有矛盾
2010-12-20 12:50
zhaoya881010
Rank: 9Rank: 9Rank: 9
来 自:芒砀古郡
等 级:蜘蛛侠
威 望:1
帖 子:339
专家分:1177
注 册:2010-11-21
收藏
得分:3 
给你写好了:
程序代码:
#include<stdio.h>
int main(int argc,char **argv)
{
    int i,n;
    for(n=2;n<=327;n++)
    {
        for(i=2;i<n;i++)
        {
            if(n%i==0)
                break;
            if(i==n-1)
            printf("%d\t",n);
        }
    }
}
结果:
图片附件: 游客没有浏览图片的权限,请 登录注册

收到的鲜花
  • 人莫予毒2010-12-20 13:07 送鲜花  3朵   附言:谢谢啦

Go Go Go
2010-12-20 13:02
雪飘万里
Rank: 2
等 级:论坛游民
帖 子:26
专家分:96
注 册:2010-12-18
收藏
得分:0 
学习.
2010-12-20 13:07
zhaoya881010
Rank: 9Rank: 9Rank: 9
来 自:芒砀古郡
等 级:蜘蛛侠
威 望:1
帖 子:339
专家分:1177
注 册:2010-11-21
收藏
得分:0 
i=2;i<n&&n%i==0;i++
给你进行下逻辑分析:先执行i=2,判断i是否小于n并且n对i取余结果为零才进入循环,这样不符合逻辑,按理说我们是如果数值n对一个小于他的i取余为零的话说明i可以整除这个数值n不应该在++了应该跳出循环因为这样可以判断n不是素数了

Go Go Go
2010-12-20 13:15
immike
Rank: 2
来 自:沙坡村驾校
等 级:论坛游民
帖 子:16
专家分:23
注 册:2010-12-17
收藏
得分:0 
优化下楼上的,求一个数是不是素数,只用除到sqrt(n)就可以了。
#include<stdio.h>
#include<math.h>
void main()
{
    int i,n;
    for(n=2;n<=327;n++)
    {
        for(i=2;i<((int)sqrt(n)+1);i++)
           if(n%i==0) break;
        if((i==((int)sqrt(n)+1))) printf("%d\t",n);
    }
}
2010-12-20 19:35
小菜小C
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:70
专家分:111
注 册:2011-3-18
收藏
得分:0 
回复 6楼 zhaoya881010
这个我对这个比较迷惑,能不能详细的讲一下

菜鸟一名,准备起飞
2011-03-18 19:18
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
楼主太粗心了
程序代码:
for(i = 2; i < n && n % i ==0; i++) {
    ...
} 
// 上面的语句意思是:令 i 的初值为 2,当 i < n 且 n 能够被 i 整除时,不断执行循环
// 而下面语句的意思是:令 i 的初值为2,当 i < n时,不断执行循环,如果 n 能够被 i 整除则停止循环
for (i = 2; i < n; i++) {
    if (n % i == 0) {
        break;
    }
    ...
}

// 这两种写法的意思是不一样滴嘛~~


[ 本帖最后由 voidx 于 2011-4-10 20:11 编辑 ]
2011-04-10 20:10
快速回复:简单的for循环求素数问题。
数据加载中...
 
   



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

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