C语言求范围之内素数的和与个数?

写出在N到M两个数范围之内的素数个数,和素数之和的代码

按照你的要求编写的C语言程序如下

#include<stdio.h>

int f(int x) //定义判断素数的函数

{

int n,flag=1;

if(x==1) return 0;

for(n=2;n<x;n++)

if(x%n==0) 

flag=0;

return flag;

}

int main()

{

int i,N,M,count=0,sum=0;

scanf("%d%d",&N,&M);

for(i=N;i<=M;i++){

if(f(i)==1){

count++;

sum=sum+i;

}

}

printf("%d到%d之间共有%d个素数,它们的和为%d",N,M,count,sum);

return 0;

}

追问

可以写一下你定义的变量代表什么吗

追答

对变量的意思加解释的程序如下(每个变量的解释见注释)
#include
int f(int x) //定义判断素数的函数
{
int n,flag=1;//flag表示返回值,x表示传入的要判断的数,n表示循环变量
if(x==1) return 0;
for(n=2;n<x;n++)
if(x%n==0)
flag=0;
return flag;
}
int main()
{
int i,N,M,count=0,sum=0;//N,M表示范围其中N<M,i表示循环变量,count表示素数个数,sum表示素数和
scanf("%d%d",&N,&M);
for(i=N;i<=M;i++){
if(f(i)==1){
count++;
sum=sum+i;
}
}
printf("%d到%d之间共有%d个素数,它们的和为%d",N,M,count,sum);
return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-10-26
以下代码已经过调试。
#include <iostream>

class sushu
{
public:
void all_prime(int low, int high);
};
void sushu::all_prime(int low, int high)
{
if (low > high) return;
int sum, times;
sum = times = 0;
bool *prime = new bool[high + 1];
for (int i = 2; i <= high; i++)
{
prime[i] = true;
}
for (int i = 2; i <= high; i++)
{
if (prime[i])
{
if (i >= low)
{
sum += i;
times += 1;
std::cout << i << std::endl;
}
for (int j = i * 2; j <= high; j += i) prime[j] = false;
}
}
std::cout << "范围内素数个数为: " << times << std::endl;
std::cout << "范围内素数和为: " << sum << std::endl;
return;
}
int main()
{
sushu *s = new sushu();
s->all_prime(100, 1000);
delete s;
return 0;
}追问

你写的代码不是我学习过的,很复杂啊,

追答

哈哈,只是可能看起来比较复杂,很好理解的,就是从2开始,将这个数到范围上限的倍数全部排除掉,再找下一个没被排除的数,重复这个过程,直到范围上限。这个算法也就是,筛法求素数,以空间换时间,是最高效的求素数算法

本回答被提问者采纳
相似回答