回复 楼主 芸芸众生丫
#include<stdio.h>
#include<math.h>
int main()
{
int i,j,a;//你把a定义为整形,后面的“a=sqrt(i)”发生类型强制转换,这里数据就失真了。因为sqrt(i)的值本是浮点型的。
double s = 0;
for(i=3;i<=100;i++)
{
for(j=2;j<=i;j++)
{
if(i%j==0)
{
break;
}
else
{
a = sqrt(i);
}//第二个for循环中:if和else是一个语句啊,执行了i-1次跳过if语句,就执行else语句了。
}
s = s + a;
}
printf("%lf",s);
}
参考代码如下:
#include<stdio.h>
#include<math.h>
int main()
{
int i,j;
double a,s=0;//把a定义为double型为宜。
for(i=3;i<100;i++)
for(j=2;j<i;j++)
{
if(i%j==0)
break;
if(j==i-1)//执行到此步,可以判定i为素数。
{
a=sqrt(i);
s=s+a;
}
}
printf("%lf\n",s);
}
上面的算法还可以再优化一下。