我做的C语言求素数,怎么不行?我用的很简单的语句

因为我是新手,所以不会什么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;
}

#include<stdio.h>
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 。。。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-03
因为你的那些if else if 是属于同一个if体中的,我举个例子吧,37是素数吧,比如说现在s已经到36了,他会执行 第一个else if 对不对,执行完了s已经成37了,但是你的这些 if else if else if 是归属一个if语句里,下面一个else if 它就不执行了,直接又回到了while里面,是不是就把37跳过了,其他素数都是一样的被跳过了。改成下面的样子应该就可以了。

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;
}
这个我还没试过,有可能会错但是我把你的错误原因说了你应该知道怎么改了。
第2个回答  2013-10-03
int main()
{
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~

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网