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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;

参考技术A 以下代码已经过调试。
#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开始,将这个数到范围上限的倍数全部排除掉,再找下一个没被排除的数,重复这个过程,直到范围上限。这个算法也就是,筛法求素数,以空间换时间,是最高效的求素数算法

本回答被提问者采纳

求100之内的素数

题目:求100之内的素数


程序分析:判断素数的方法:用一个数分别去除2sqrt(这个数)如果能被整除, 则表明此数不是素数,反之是素数。

 

 

 1 package com.li.FiftyAlgorthm;
 2 
 3 /**
 4  * 题目:判断101-200之间有多少个素数,并输出所有素数。
 5  * 程序分析:判断素数的方法:用一个数分别去除2得到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
 6  * @author yejin
 7  */
 8 public class PrimeNumber {
 9     public static int count = 0;
10 
11     public static void main(String[] args) {
12         for (int i = 101; i < 200; i++) {
13             boolean b = true; // 默认次数是素数
14             for (int j = 2; j < Math.sqrt(i); j++) {
15                 if (i % j == 0) {
16                     b = false; // 此数不是素数
17                     break;
18                 }
19             }
20             if (b) {
21                 count++;
22                 System.out.println(i + "");
23             }
24         }
25         System.out.println("素数的个数:" + count);
26     }
27 }

 

以上是关于C语言求范围之内素数的和与个数?的主要内容,如果未能解决你的问题,请参考以下文章

C语言编程:求n以内的k个最大素数以及他们的和,咋写

如何提高筛选法求大范围素数的效率

c语言求两个数之间的和跟差

C语言编程:求n以内的k个最大素数以及他们的和,咋写?

编写程序求出100到1000范围内所有素数的和c语言

C语言,求15以内的素数,关于num=1时,怎么修改?求大神