因为我是新手,所以不会什么Break语句,用了while循环和if语句,谁能帮我看看怎么回事,我一运行,不显示,按回车就关闭程序了。
---------------------------------------------------------------------------------
#include<stdio.h>
int main()
{
int i,s,y; //i代表1~10000的数字,s代表因数,y是余数
i=3; //先让数字为3
s=2;
printf("从1~10000之间的素数有:\n");
while (i<=10000) //当数字小于10000,即在一万以内,执行循环
{
y=i%s; //余数y赋值为i除以S的余数
if (y==0) //如果能被2整除,余数为零时
{s=2;i++;} //表示这个i不是素数,i++换下一个数,s再回到2
else if(y!=0&&s<i) //如果余数不为零,且因数还是小于被除数
s++; //让被除数再加一个,再看能否被整除
else if(y!=0&&s>=i) //直到被除数已经大于数字了
{printf("%d ",i); //说明从1~i之间没有能整除i的了,他是素数,输出
i++;s=2;} //然后i++换下一个数,s重新回到2
}
getch(); //屏幕停留
return 0;
}
int main()
{
int i,s,y; //i代表1~10000的数字,s代表因数,y是余数
i=3; //先让数字为3
s=2;
printf("从1~10000之间的素数有:\n2 ");
while (i<=10000) //当数字小于10000,即在一万以内,执行循环
{
y=i%s; //余数y赋值为i除以S的余数
if (y==0) //如果能被2整除,余数为零时
{s=2;i++;} //表示这个i不是素数,i++换下一个数,s再回到2
else if(y!=0&&s<i - 1) //如果余数不为零,且因数还是小于被除数
s++; //让被除数再加一个,再看能否被整除
else if(y!=0&&s==i - 1) //直到被除数已经大于数字了
{printf("%d ",i); //说明从1~i之间没有能整除i的了,他是素数,输出
i++;s=2;} //然后i++换下一个数,s重新回到2
}
getch(); //屏幕停留
return 0;
}
//对于一个素数n,你原来的代码是用s枚举2到n去看看能不能整除n,知道s达到n对吧,但是当s就是n的时候,很明显会使得y等于0,所以会被当成不是素数,楼主你枚举2到n-1就好了。另外楼主你忘了素数还有2 。。。
while (i<=10000) //当数字小于10000,即在一万以内,执行循环
{
y=i%s; //余数y赋值为i除以S的余数
if (y==0&&s!=i) //如果能被2整除,余数为零时
{s=2;i++;} //表示这个i不是素数,i++换下一个数,s再回到2
else if(y!=0&&s<i) //如果余数不为零,且因数还是小于被除数
s++; //让被除数再加一个,再看能否被整除
else (y==0&&s=i) //直到被除数已经大于数字了
{printf("%d ",i); //说明从1~i之间没有能整除i的了,他是素数,输出
i++;s=2;} //然后i++换下一个数,s重新回到2
}
getch(); //屏幕停留
return 0;
}
这个我还没试过,有可能会错但是我把你的错误原因说了你应该知道怎么改了。
{
int i,s,y; //i代表1~10000的数字,s代表因数,y是余数
i=3; //先让数字为3
s=2;
printf("从1~10000之间的素数有:\n");
while (i<=10000) //当数字小于10000,即在一万以内,执行循环
{
//printf("1");
y=i%s; //余数y赋值为i除以S的余数
if (y==0&&s<i) //如果能被2整除,余数为零时
{s=2;i++;} //表示这个i不是素数,i++换下一个数,s再回到2
else if(y!=0&&s<i) //如果余数不为零,且因数还是小于被除数
{s++; } //让被除数再加一个,再看能否被整除
else //if(s==i) //直到被除数已经大于数字了
{
printf("%d ",i); //说明从1~i之间没有能整除i的了,他是素数,输出
i++;s=2;} //然后i++换下一个数,s重新回到2
}
// getch(); //屏幕停留
return 0;
}
注意下12行语句~遍历到最后即本身除以本身 余数也是0~