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

#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函数里的代码有什么问题?(别的代码也能实现这功能,但我只想知道我的思路错在哪里?) 谢谢!!

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);
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-03-01
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);
}
应该没什么错误吧,呵呵
第2个回答  2012-03-01
//下面是正确的程序。
#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)

看了改正后的代码,我恍然大悟。 我分析的对不?

第3个回答  2012-03-01
gh

...函数fun ,其功能是:计算并输出3到n之间所有素数的平方根之和。
} void fun(int n){ int i;float sum=0;for(i=3;i<=n;i++)if(prime(i)) sum=sum+sqrt(i);printf("sum=%f",sum);} 非要写成一个函数的话,可以这样:include <stdio.h> include <math.h> void fun(int n){ int i;float sum=0;for(i=3;i<=n;i++){ int f=1;{ ...

...fun函数功能是计算3到n之间所有素数的平方根之和,我写的fun函数运行...
double fun(int n){ int i,j;double s=0;for(i=3;i<=n;i++){ for(j=2;j<=i;j++)while(i%j==0);if(i==j)s=s+sqrt(i);} return s;}

...计算3 到100 之间所有素数的平方根之和,并输出.s=148.874270._百度知 ...
int main(){int n;double s;for(n=3;n<=100;n++){if(fun(n)==1){s=s+sqrt(n);}}printf("s=%lf",s);return 0; }

...fun函数功能是计算3到n之间所有素数的平方根之和,我写的fun函数运行...
所以里面应该先设置一个变量a=1,在循环里面,如果i%j==0,那就设置a=0,break,否则继续循环,如果直到循环结束a仍然为1,那就说明是素数。纯手打,望采纳~

计算并输出3到n之间的所有素数的平方根之和
double fun(int n){ int m=3,i;double s=0;while(m<=n){ for(i=3;i<=sqrt(m);i=i+2)if(m%i==0)break;if(i>sqrt(m)&&m!=1)s+=sqrt(m);m+=2;} return s;} void main(){ int n;while(scanf("%d",&n)!=EOF){ if(n<3){ printf("请输入大于2的数\\n");contin...

计算3~n之间所有素数的平方根之和,要求:输入n,输出结果注意n应在2~1...
(filter-accumulate filter combiner null-value term (next a) next b))(filter-accumulate filter combiner null-value term (next a) next b)))(define (sum-of-primes-sqrt a b) (filter-accumulate prime? + 0 sqrt a inc b))(define (solution n)(sum-of-primes-sqrt 3 n))

c语言,计算并输出3到n之间所有素数的平方根之和
我来解释 double fun (int n ){ int m , k, i ;double s=0.0 ;for(m=3 ; m<=n ; m++){ k=sqrt(m);\/\/如果一个数不是素数 那么他一定有一个因子是小于其平方根的。比如m不是素数 设m=i*j 假设i<j 那么 i^2<=m<=j^2 得出i<sqrt(m)<j;所以只需要比到m的...

计算并输出3到n之间所有素数的平方根之和 n>2不同>100
将以下公式考到EXCEL工作表中 A列,选择A列,然后选择数据的分列,点击分隔符号,单击下一步,选择其它并输入一个空格,单击完成,EXCEL工作表将计算出结果。最后考贝下面公式,完成所有计算。n 素数的平方根 平方根的和 3 =IF(OR(AND(A2>2,MOD(A2,2)=0),AND(A2>3,MOD(A2,3)=0),AND(A2>...

c语言编程题 计算并输出3到n之间所有素数的平方根之和
include<stdio.h> include<math.h> int isprime(intn){for(inti=2;i*i<=n;i++)if(n%i==0)return 0;return n>1;} int main(){int n,i;double s=0;scanf("%d",&n);for(i=3;i<=n;i+=2)if(isprime(i))s+=sqrt(i);printf("%.3lf\\n",s);return 0;} 输出结果 ...

c语言 计算并输出3~n之间所有素数的平方根的和
if(j>=i){ \/\/应该加上{} i是素数才要s+=k;k=sqrt(i);s+=k;}

相似回答