分解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个数,为什么,不知道错在哪???
----------------解决方案--------------------------------------------------------
原因在于循环内出现a++的语句,自己考虑下
程序改了一下:
#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;
}
if(b==a/2+1)
printf("%d,\t",a);
a++;
}
printf("\n");
}
----------------解决方案--------------------------------------------------------
楼主的主要错误在于,循环语句上,
举个例子,假设是从117开始验证的,那么B=2,3 4 5 6 7。。。。。
一直到b=13,这个时候117%13=0,此刻B的直是13了,这个时候WHILE的条件还满足(B〈117/2),所以继续循环,此刻,B=13,A=118,
那么118%B,B就从13 开始增加,一直到B=59,才被整除,此刻B=59,A++了一下,a=119,这个时候WHILE语句条件不满足,所以就跳出循环,执行PRINTF 119。
楼主的想法是想使B从2开始验证,但实际上却不是;
还有
----------------解决方案--------------------------------------------------------
贴一下我的程序:
#include <math.h>
#include<iostream>
void main()
{
int m,k,i,n=0;
bool prime;
for(m=101;m<=200;m=m+2)
{prime =true;
k=int(sqrt(m));
for (i=2;i<=k;i++)
if(m%i==0)
{prime=false;
break;
}
if(prime)
printf("%d,\t",m);
}
printf("\n");
}
----------------解决方案--------------------------------------------------------
----------------解决方案--------------------------------------------------------
你的是c还是c++,c也能调用c++的头?
应该能在TC下运行吧?
我用的是VC,呵呵
----------------解决方案--------------------------------------------------------
贴一下我的程序:
#include <math.h>
#include<iostream>
void main()
{
int m,k,i,n=0;
bool prime;
for(m=101;m<=200;m=m+2)
{prime =true;
k=int(sqrt(m));
for (i=2;i<=k;i++)
if(m%i==0)
{prime=false;
break;
}
if(prime)
printf("%d,\t",m);
}
printf("\n");
}
请问if(prime)有什么作用?
----------------解决方案--------------------------------------------------------
----------------解决方案--------------------------------------------------------