c++求素数菜鸟问题

来源:百度知道 编辑:UC知道 时间:2024/05/31 01:15:46
#include"iostream.h"
void main()
{
int x,y;
for(x=2;x<=100;x++)
{for(y=2;y<x;y++)
if(x%y==0)break;
if(x==y)
cout<<x<<'\t';
}
}
内循环中有个y<x,为什么下面x==y还能成立?
我搞的头都快晕了,还是很难理解。比如x=3,由于y<x,只能取2,y取不到3,x=y应该不可能出现啊,怎么还要if(x==y)呢
,是不是应该改成y=2;y<=x;y++呢,貌似这样才好理解,但是运行错误- -

y<x,y++ 假设x=3 y现在=2
那么y还是小于x 还是可以++ 那么最后就等于x了啊

for(y=2;y<x;y++) 的循环体为if(x%y==0)break;

你程序的写法相当于
for(y=2;y<x;y++)
{
if(x%y==0)break;
}
if(x==y)
cout<<x<<'\t';

很明显,你是正确的,这个程序本身有问题(我现在只讨论程序,不讨论算法)。
程序本身是这样想的,判断是一个数是不是素数,就把这个数,带除小于它的所以说,如果它不能被这些数中任何一个数整除的话,这个数肯定就是素数了。

#include"iostream.h"
void main()
{
int x,y;
for(x=2;x<=100;x++)
{for(y=2;y<x;y++)
if(x%y==0)break;
if(x==y)
cout<<x<<'\t';
}
}

只有当结束了第二个for循环才会进行判断(不信的话,你可以进行单步调试)。
这个时候就进行判断,如果这时候y<x的话,明显是因为 x能够整除y,引发了if的break;而如果此时如果x==y的话,明显是因为循环由于不满足y<x而退出的,这就说明if (x%y == 0) 一直都没引发,也就说明了x不能被小于它的任何一个数整除(当然1除外)。所以当然x就是整数了。

本来已经说完了,但看到这个程序的写法实在觉得有点不舒服,判断一个数是否是素数真的整除这么多数才行吗?
楼主可以多利用数学的思想来解决这种问题!!

看样子你自己都没看明白你的程序
for(x=2;x<=100;x++)
{for(y=2;y<x;y++) <