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函数里的代码有什么问题?(别的代码也能实现这功能,但我只想知道我的思路错在哪里?) 谢谢!! 展开
#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函数里的代码有什么问题?(别的代码也能实现这功能,但我只想知道我的思路错在哪里?) 谢谢!! 展开
4个回答
展开全部
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);
}
{
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);
}
展开全部
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);
}
应该没什么错误吧,呵呵
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);
}
应该没什么错误吧,呵呵
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
//下面是正确的程序。
#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);
}
#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)
看了改正后的代码,我恍然大悟。 我分析的对不?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询