//楼主判定"素数"的算法需要改善,可参考其他网友的算法.
十年建站经验, 网站设计、成都网站制作客户的见证与正确选择。成都创新互联提供完善的营销型网页建站明细报价表。后期开发更加便捷高效,我们致力于追求更美、更快、更规范。
#include stdio.h
#include math.h
int prime( int p );
int PrimeSum( int m, int n );
int main()
{
int m, n, p;
scanf("%d %d", m, n);
printf("Sum of ( ");
for( p=m; p=n; p++ )
{
if( prime(p) != 0 )
printf("%d ", p); //输出素数
}
printf(") = %d\n", PrimeSum(m, n));
return 0;
}
int prime( int p )
{
int m=p;
while(m1)
{
m--;
//在函数prime里,如果p是素数,当循环到m等于2,在执行m--之后,m就等于1,
//再执行if(p%m==0),必然return 0
//所以,在m--之后,增加一句if(1==m) return 1;
if(1==m)
{
return 1;
}
if(p%m==0)
{
return 0;
}
}
return 1;
}
int PrimeSum( int m, int n )
{
int result=0;
for(m;m=n;m++)
{
if(prime(m)!=0)
result=result+m;
}
return result;
}
可以写一个判断n是否素数的函数,是素数就返回1(真)否则就返回0(假)。
在main()函数中用循环,检测指定范围内的每一个数,是素数的话就把它们累加起来。
#includestdio.h
int isprime(int n)
{int i;
for(i=2;i*i=n;i++)
if(!(n%i))return 0;
return n1;
}
int main()
{int i,a,b,s=0;
scanf("%d%d",a,b);
for(i=a;i=b;i++)
if(isprime(i))
{printf("%d ",i);
s+=i;
}
printf("\n%d~%d之间的素数和=%d\n",a,b,s);
return 0;
}
您好,很高兴回答您的问题。
对于您的这个问题,有两个方面的知识点需要掌握,一是素数的判断标准,我们知道只能被1和数本身整除的数叫素数,具体实践时就要用到循环结构;而是函数的调用,要清楚调用函数的结构和使用方法,才能用好调用。
以上两个问题解决了,那么这个程序就可以实现功能了。还有关键的一点就是您没有给出具体的范围,也就是求哪个范围内的素数之和呢,没有这个范围,也就没有办法求出和了。
#include stdio.h
#include math.h
int pd(int k) //判断质数 效率挺高的 你也可以用二重筛选法 那个算法是最快的
{
int i;
int s=sqrt(k);
if(k==1) return 0;
if(k==2) return 1;
if(k%2==0) return 0;
for(i=3;i=s;i+=2)
if(k%i==0) return 0;
return 1;
}
int main()
{
int i=2,k=0,sum=0; //i表示数字 k这表示有多少个质数了 sum表示质数的和
while(k=50)
{
if(pd(i)) { k++;sum+=i;}
i++;
}
printf("%d",sum);
return 0;
}
楼主 给我吧
#include stdio.h
#include math.h
//判断是否为素数的函数
int isPrime(int n)
{
int i=2;
while(i=(int)sqrt(n))
{
if(n%i == 0)
return 0; //不是素数,直接返回0
else
i++;
}
return 1;
}
int main()
{
int n,i;
printf("输入一个正整数: ");
scanf("%d",n);
for(i=2;i=n;i++)
{
if(isPrime(i)) //调用函数,如果该数为素数,则输出
printf("%d ",i);
}
printf("\n");
return 0;
}
示例运行结果:
输入一个正整数: 50
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47
#include "stdio.h"
#include "math.h"
int main(void)
{
int count, i, m, n, sum;
int repeat, ri;
int prime(int m);
scanf("%d", repeat);
for(ri = 1; ri = repeat; ri++){
scanf("%d %d", m, n);
sum = count = 0;
for(i=m;i=n;i++){
if(prime(i)==1){
sum=sum+i;
count++;}
}
printf("Count=%d,sum=%d\n",count,sum);
}
}
int prime(int m)
{
int i;
if(m==2)return 1;
if(m==1)return 0;
if(m2){
for(i=2;im;i++){
if(m%i==0)
return 0;}
return 1;//你的主要问题在这里,上面的for循环已经限定了i不会大于m的,你再用了一个if(i=m)就不对了
}
}