搜索
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 请教素数的求法
标题:
请教素数的求法
只看楼主
Hollie
等 级:
新手上路
帖 子: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
等 级:
小飞侠
威 望:
3
帖 子:783
专家分:2806
注 册:2009-9-17
第
2
楼
得分: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
等 级:
新手上路
帖 子:19
专家分:1
注 册:2009-9-29
第
3
楼
得分: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
等 级:
小飞侠
威 望:
3
帖 子:783
专家分:2806
注 册:2009-9-17
第
4
楼
得分:0
回复 3楼 Hollie
第一:你没有加等号,只是小于。
第二:当你break的时候,for循环就结束了。而你没有将后面的printf语句放到第二个for循环里。所以它就只在第一个for循环里起作用,所以就原数输出了。
2009-09-29 18:32
Hollie
等 级:
新手上路
帖 子:19
专家分:1
注 册:2009-9-29
第
5
楼
得分:0
以下是引用
m456m654
在2009-9-29 18:32:31的发言:
第一:你没有加等号,只是小于。
第二:当你break的时候,for循环就结束了。而你没有将后面的printf语句放到第二个for循环里。所以它就只在第一个for循环里起作用,所以就原数输出了。
不对呀 我上面是小于等于啊
break 是用来 跳出内循环 当不是素数的时候就跳出去 是的话 就输出下面的printf语句
这么说 我的printf没放到内循环里面 那怎么样才算放进去?
我就是对for循环 不大熟悉 谢谢了
2009-09-29 18:43
m456m654
等 级:
小飞侠
威 望:
3
帖 子:783
专家分:2806
注 册:2009-9-17
第
6
楼
得分: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
等 级:
新手上路
帖 子:19
专家分:1
注 册:2009-9-29
第
7
楼
得分: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
等 级:
小飞侠
威 望:
3
帖 子:783
专家分:2806
注 册:2009-9-17
第
8
楼
得分: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
等 级:
论坛游民
帖 子:11
专家分:13
注 册:2009-9-25
第
9
楼
得分:0
楼上讲的真好,练 我这个刚接触C语言的人都看得很明白。多谢!
2009-09-29 19:21
Hollie
等 级:
新手上路
帖 子:19
专家分:1
注 册:2009-9-29
第
10
楼
得分:0
以下是引用
m456m654
在2009-9-29 19:13:33的发言:
你没有理解我的意思,当然我上个帖子说的有点误导。
我本来是想表达你为什么错了,那个程序是你认为对的,我是想把你的错误标记出来。
那个绿色的口号不应该在那个位置;
这样改:
#include<stdio.h>
#include<math ...
谢谢 你 能留下你QQ吗 我还是不大明白
我对for 循环的一直头晕
2009-09-29 19:24
12
1/2页
1
2
参与讨论请移步原网站贴子:
https://bbs.bccn.net/thread-287268-1-1.html
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.177001 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved