fun函数功能是计算并输出3—n之间所有素数的平方根之和,输入n=100后,正确结果为s=148.874270.

#include<stdio.h>#include<math.h>doublefun(intn){inti,j;doubles=0.0;for(i=3;i<=n;i++)... #include <stdio.h>
#include <math.h>
double fun(int n)
{
int i,j;
double s=0.0;
for(i=3;i<=n;i++)
{
for(j=2;j<i;j++)
if(i%j!=0)
s+=sqrt(i);
}
return s;
}
main()
{int n;
double sum;
printf("Input N=");
scanf("%d",&n);
sum=fun(n);
printf("\n\nsum=%f\n\n",sum);

为什么我输入100后,结果错了?fun函数里的代码有什么问题?(别的代码也能实现这功能,但我只想知道我的思路错在哪里?) 谢谢!!
展开
 我来答
kaixingui2012
推荐于2016-04-17 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6318万
展开全部
double fun(int n)
{
int i,j;
double s=0.0;
for(i=3;i<=n;i++)
{
for(j=2;j<i;j++)
if(i%j!=0)
s+=sqrt(i);
//这里错了,2到i间的数,都不能整除i才可以确定 为素数
}
return s;
}

修改说明:
for(i=3;i<=n;i++)
{
for(j=2;j<i;j++)
if(i%j==0)
break;
if ( j==i ) //j==i说明2到i间的数 都不能整除i , 如果有因数,则j一定小于i
s+=sqrt(i);
}
淦海瑶s1
2012-03-01 · TA获得超过3646个赞
知道大有可为答主
回答量:3341
采纳率:100%
帮助的人:748万
展开全部
for(j=2;j<i;j++)
if(i%j!=0)
s+=sqrt(i);
这里判断素数有问题,我给你个更好一点的思路
#include <stdio.h>
#include <math.h>
int sushu(int n)
{
int i;
for(i=2;i*i<=n;i++)
if(n%i==0)
return 0;
return n;
}
main()
{
int n,i;
float sum=0.0;
printf("Input N=");
scanf("%d",&n);
for(i=3;i<=n;i++)
sum+=sqrt(sushu(i));
printf("\n\nsum=%f\n\n",sum);
}
应该没什么错误吧,呵呵
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sun_siliang
2012-03-01 · TA获得超过2.6万个赞
知道大有可为答主
回答量:9913
采纳率:100%
帮助的人:4553万
展开全部
//下面是正确的程序。
#include <stdio.h>
#include <math.h>
double fun(int n)
{
int i,j;
double s=0.0;
for(i=3;i<=n;i++)
{
for(j=2;j<i;j++)
if(i%j==0)
break;
if(j>=i)
s+=sqrt((double)i);
}
return s;
}
void main()
{int n;
double sum;
printf("Input N=");
scanf("%d",&n);
sum=fun(n);
printf("\n\nsum=%f\n\n",sum);
}
追问
if(i%j==0)
break;
if(j>=i)
s+=sqrt((double)i);

表示i%j==0只要出现第一次,i就不是素数了,而i%j!=0,不能充分说明i是素数,因为j之后的数有可能i%j==0,只有所有的i都过一遍才充分,所以有了后面的 if(j>=i)

看了改正后的代码,我恍然大悟。 我分析的对不?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
孤独寂寞man
2012-03-01
知道答主
回答量:27
采纳率:0%
帮助的人:6.9万
展开全部
gh
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式