注册 登录
编程论坛 C++教室

显示所有质数,弄不出1来

ReadingLi 发布于 2007-08-07 15:37, 1331 次点击

题中让我弄出1~100的质数,研究半天,终于出来了
#include <iostream>
using namespace std;
void main ()
{
int n,b,c,d;
for(n=1;n<=100;n++)
{
for (b=n;b>=1;b--)
{
d=b-1;
if (d==0)
break;
c=n%d;
if (d>1&&c==0)
break;
else if (d==1&&c==0)
cout <<n<<" "endl;


}
}
}
我的意思是让每个数一个个往下除(比自己小的数),如果中途有能除尽了的数就不是质数,当只有除到1时才能除尽就是质数了,这样出来后是从2开始的,我明白当n=1时,d=b-1=0了,break跳出,可是不跳出会说程序出错,还让我发送,我理解的原因是因为c=n%d,中,d=0了,所以不行,可这样一来,1就出不来了啊!帮忙改改让1也自己出来啊,我这个程序能想到的就是在循环之前直接加个cout <<"1";了

15 回复
#2
aipb20072007-08-07 16:33

晕,据我所知,1非素数,也非和数,最小的素数是2,这可是初中知识啊!

#3
ReadingLi2007-08-07 16:49

靠~~~~不会吧,我为这个1弄了一多小时了

#4
maoguoqing2007-08-07 20:13
  if (1 == n) cout&lt;&lt;n;  
#5
狂人老大2007-08-08 00:21
呵呵  
#6
ReadingLi2007-08-08 09:56
回复:(maoguoqing)[em02] if (1 == n) cout
呵呵,我也就知道能这么干,我觉得开始我一下定义了四个变量,是不是有点多啊,能不能有什么更简单的程序啊,感觉有点复杂!
#7
aipb20072007-08-08 10:23
int i,j;
cout << 2 << endl;
for (i = 3;i <= 100;++i){
for (j = 2;j < i;++j)
if (i % j == 0)
break;
if (i == j)
cout << i << endl;
}
-----------------------------------
当然还可以改进,那里j < i可以改为j < sqrt(i)(i开方)。
#8
ReadingLi2007-08-08 10:44
OK,谢了,确实简单了不少,你的意思是,从2往上一个个除是吧,这样省了不少步骤
#9
狂人老大2007-08-08 12:25
#include<iostream>
using namespace std;
int main()
{
cout<<"2"<<endl;
for(int i(3);i<=100;i=i+2)
{
for(int j(2);j<=i;j++)
if(i%j==0)break;
if(i==j)
cout<<i<<endl;
}
}
改了一点点 这样可以减少运算
#10
aipb20072007-08-08 12:34

j++ ?减少运算?


望指教~

[此贴子已经被作者于2007-8-8 12:39:42编辑过]

#11
leng2007-08-08 12:40

偶数肯定不是质数噻 可以不用判断了

#12
狂人老大2007-08-08 12:46
#include<iostream>
using namespace std;
int main()
{
cout<<"2"<<endl;
for(int i(3);i<=100;i=i+2)
{
for(int j(2);j<=i;j++)
if(i%j==0)break;
if(i==j)
cout<<i<<endl;
}
不好意思哈 搞错了 是i=i+2
#13
wingyip2007-08-08 19:21
呵呵 1不是質數喔。
#14
野比2007-08-08 21:01
一失手成千古恨....
#15
lijy5202007-08-08 21:30
判断素数很简单的啊
#16
し七月ご2007-08-10 19:22
#include<iostream>
using namespace std;
int main()
{
cout<<"2"<<endl;
for(int i(3);i<=100;i=i+2)
{
for(int j(2);j<i;j++)
if(i%j==0)break;
//if(i==j),似乎这行没用...
else cout<<i<<endl;
}
1