| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3093 人关注过本帖
标题:请教素数的求法
只看楼主 加入收藏
Hollie
Rank: 1
等 级:新手上路
帖 子:19
专家分:1
注 册:2009-9-29
结帖率:0
收藏
 问题点数:0 回复次数:11 
请教素数的求法
下面是我写的 程序
输出100到200之间的素数



#include<stdio.h>
#include<math.h>
void main()
{
    int i=2,j=100;
    for(j=100;j<=200;j++)
    {
        for(i=2;i<(sqrt(j));i++)
            if(j%i==0) break;
             printf("%d  "  ,j);
    }
 printf("\n" );

}



不知道是什么问题  全部输出原数



搜索更多相关主题的帖子: 求法 素数 
2009-09-29 17:55
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:0 
#include<stdio.h>
#include<math.h>
void main()
{
    int i,j;
    for(j=100;j<=200;j++)
    {
        for(i=2;i<=sqrt(j);i++)
            if(j%i==0) break;
            if(i>sqrt(j))
             printf("%d  ",j);
    }
printf("\n" );
 
}
 
2009-09-29 18:16
Hollie
Rank: 1
等 级:新手上路
帖 子:19
专家分:1
注 册:2009-9-29
收藏
得分:0 
以下是引用m456m654在2009-9-29 18:16:53的发言:

#include<stdio.h>
#include<math.h>
void main()
{
    int i,j;
    for(j=100;j<=200;j++)
    {
        for(i=2;i<=sqrt(j);i++)
            if(j%i==0) break;
            if(i>sqrt(j))
         ...
谢谢 这位朋友    我不明白为什么加一个语句 if(i>sqrt(j)) 就行了

我不加 上面  不是写了 小于等于吗?  为什么不行呢?
2009-09-29 18:22
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:0 
回复 3楼 Hollie
第一:你没有加等号,只是小于。
第二:当你break的时候,for循环就结束了。而你没有将后面的printf语句放到第二个for循环里。所以它就只在第一个for循环里起作用,所以就原数输出了。
2009-09-29 18:32
Hollie
Rank: 1
等 级:新手上路
帖 子:19
专家分:1
注 册:2009-9-29
收藏
得分:0 
以下是引用m456m654在2009-9-29 18:32:31的发言:

第一:你没有加等号,只是小于。
第二:当你break的时候,for循环就结束了。而你没有将后面的printf语句放到第二个for循环里。所以它就只在第一个for循环里起作用,所以就原数输出了。
不对呀  我上面是小于等于啊


break 是用来 跳出内循环  当不是素数的时候就跳出去 是的话 就输出下面的printf语句
 
这么说 我的printf没放到内循环里面   那怎么样才算放进去?




我就是对for循环  不大熟悉   谢谢了
2009-09-29 18:43
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:0 
#include<stdio.h>
#include<math.h>
void main()
{
    int i=2,j=100;
    for(j=100;j<=200;j++)
    {
        for(i=2;i<(sqrt(j));i++)
           {
            if(j%i==0)
            break;
            printf("%d  "  ,j);
           
}
    }
printf("\n" );
 
}
 
你只有if了。else就是什么也不做。绿色的大括号你没加。
2009-09-29 18:49
Hollie
Rank: 1
等 级:新手上路
帖 子:19
专家分:1
注 册:2009-9-29
收藏
得分:0 
以下是引用m456m654在2009-9-29 18:49:36的发言:

#include<stdio.h>
#include<math.h>
void main()
{
    int i=2,j=100;
    for(j=100;j<=200;j++)
    {
        for(i=2;i<(sqrt(j));i++)
           {
            if(j%i==0)
            break;
   ...
我把程序改这样   怎么就不对了呢     服了  自己

#include<stdio.h>
#include<math.h>
void main()
{
    int i,j;
    for(j=101;j<=200;j=j+2)
    {
        for(i=2;i<=sqrt(j);i++)
        {
            if(j%i==0) break;
     //       if(i>sqrt(j))
             printf("%d  ",j);
        }
    }
printf("\n" );

}
2009-09-29 19:05
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:0 
回复 7楼 Hollie
你没有理解我的意思,当然我上个帖子说的有点误导。
我本来是想表达你为什么错了,那个程序是你认为对的,我是想把你的错误标记出来。
那个绿色的口号不应该在那个位置;
这样改:
#include<stdio.h>
#include<math.h>
void main()
{
    int i,j;
    for(j=101;j<=200;j=j+2)
    {
        for(i=2;i<=sqrt(j);i++)
        
            if(j%i==0) break;
        if(i>sqrt(j))
        printf("%d  ",j);
      
    }
printf("\n" );
}
我在说说正确的思路,别把你误导了,呵呵:
这里面有两个for循环,第二个for循环到break就应该结束,
        if(i>sqrt(j))
        printf("%d  ",j);
这两句应该在第二个for循环结束后执行,它只属于第一个for循环,不知道你明白了没有。
2009-09-29 19:13
lxsl
Rank: 2
等 级:论坛游民
帖 子:11
专家分:13
注 册:2009-9-25
收藏
得分:0 
楼上讲的真好,练 我这个刚接触C语言的人都看得很明白。多谢!
2009-09-29 19:21
Hollie
Rank: 1
等 级:新手上路
帖 子:19
专家分:1
注 册:2009-9-29
收藏
得分:0 
以下是引用m456m654在2009-9-29 19:13:33的发言:

你没有理解我的意思,当然我上个帖子说的有点误导。
我本来是想表达你为什么错了,那个程序是你认为对的,我是想把你的错误标记出来。
那个绿色的口号不应该在那个位置;
这样改:
#include<stdio.h>
#include<math ...
谢谢 你   能留下你QQ吗   我还是不大明白

我对for 循环的一直头晕
2009-09-29 19:24
快速回复:请教素数的求法
数据加载中...
 
   



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

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