读书人

帮忙看下这个程序结果为什么多出5个数

发布时间: 2012-03-22 17:43:57 作者: rapoo

帮忙看下这个程序结果为什么多出5个数,不知错在哪?
分解100-200间的质数

#include <stdio.h>
void main()
{
int a,b;
a=100;
printf( "\n ");
while (a <200)
{
b=2;
while (b <=a/2)
{
if (a%b!=0)
b++;
else
a++;
}
printf( "%d,\t ",a);
a++;
}
printf( "\n ");
}

正确答案是21个,可我的却是26个,多了119,123,135,143,147 这5个数,为什么?

[解决办法]
while (b <=a/2)
{
if (a%b!=0)
b++;
else
a++;//执行内while?
}
[解决办法]
#include <stdio.h>
void main()
{
int a,b;
a=100;
printf( "\n ");
while (a <200)
{
b=2;
while (b <=a/2)
{
if (a%b!=0)
b++;
else
break;//a++;
}
if(b == a/2+1)
printf( "%d,\t ",a);
a++;
}
printf( "\n ");
return;
}
[解决办法]
改成这样:

#include <stdio.h>
int main()
{
int a,b;
a=100;
printf( "\n ");
while (a <200)
{
b=2;
while (b <=a/2)
{
if (a%b!=0)
b++;
else
{
a++;
b = 2; //按照你的意思,b应该从2开始
}
}
printf( "%d,\t ",a);
a++;
}
printf( "\n ");
return 1;
}
[解决办法]
质数不是这样求滴,楼主的这个程序需要做一个大的修改。


#include <stdio.h>
#include <math.h> /* 使用 sqrt()函数 */

int main(void)
{
int a, b, flag; /* 用来标记a是否能被一个数整除 */

flag = 1;
a = 100;
while (a <=200)
{
flag = 1;
b = 2;
while (b <=sqrt(a)) /* 判断一个数是否是一个质数的方法 */
{
if (a%b == 0)
{
flag = 0; /* flag为0 表示a不是一个质数,退出内循环 */
break;
}
b++;
}
if (flag == 1)
{
printf ( "%d, ", a);
}
a++;
}
return 0;
}

读书人网 >C语言

热点推荐