[程序设计入门—C语言] 素数和

题目内容:http://mooc.study.163.com/learn/ZJU-1000002011#/learn/ojhw?id=1000052000

我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推。

现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。

输入格式:

两个整数,第一个表示n,第二个表示m。

输出格式:

一个整数,表示第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。

输入样例:

2 4

输出样例:

15

我的思路:

判断6N-1 和6N+1 是否素数(N>1),可以快速筛掉很多合数。生成一个素数数组prime[ ]。因为6N, 6N+2, 6N+3, 6N+4都肯定是合数。

生成素数时,判断n 是否素数,从2开始直到sqrt(n)+1 是否整除n 即可。

#include <stdio.h>
#include <math.h>
int MAXSIZE = 201;
int isPrime(int n);
int makePrime(int tail,int prime[MAXSIZE]);

int main(){

	int prime[MAXSIZE];

	int start,end;
	long sum = 0;
	scanf("%d%d",&start,&end);
	//start = 2;
	//end = 200;

	makePrime(end,prime);
	for(int i=start;i<=end;i++){
		sum+= prime[i];
	}
	printf("%d",sum);

	return 0;
}

int isPrime(int n){
	double s = sqrt(n);
	for (int k=2;k<s+1;k++){
		if (n%k == 0)
			return 0;
	}
	return 1;
}

int makePrime(int tail,int prime[MAXSIZE]){
	if (tail>MAXSIZE)
		return -1;

	prime[0]=0;
	prime[1]=2;
	prime[2]=3;
	int pos = 3;//pos is the position of prime[]

	for(int N = 1;pos<=tail;N++){
		if (isPrime(6*N-1)){
			prime[pos]=6*N-1;
			pos++;
		}
		if (isPrime(6*N+1)){
			prime[pos]=6*N+1;
			pos++;
		}
	} 
	return 0;
}
时间: 2024-08-29 16:07:31

[程序设计入门—C语言] 素数和的相关文章

程序设计入门——C语言 习题汇总

?? 中国大学MOOC 程序设计入门--C语言 翁恺 公告 评分标准 课件 测验与作业 考试 讨论区 教材与参考资料 分享到 帮助中心 测验与作业 次汇总由CSDN-fjinhao原创,转载请注明来源,此汇总由于本人 能力有限,欢迎各位程序爱好者来此讨论交流,给予指正,本人 联系邮箱[email protected],谢谢. 查看帮助 老师还没有发布测试和作业,请耐心等待 第1周:计算   第1周编程练习 截止时间:2015年5月4日 0:00 前往作业 作业类型 Online Judge作

网易云课堂程序设计入门--C语言第七周:指针与字符串学习笔记

====================================== 第七周:指针与字符串学习笔记 网易云课堂 程序设计入门–C语言 指针与字符串 学习笔记 ====================================== 7-1指针初步 7-1-1类型大小与取地址运算 sizeof是一个运算符 给出某个变量货类型在内存中所占据的字节数 sizeof(int); sizeif(i); double变量在内存中占据的空间是int变量的两倍 { int a; a =6; prin

程序设计入门-C语言基础知识-翁恺-期中测试

一.试题 程序设计入门-C 语言期中测评1 在代码:while ( !e )中,!e 等价于:A.e ==0 B. e != 1 C. e!=0 D. e == 12. 以下代码片段的输出是:int j=4;for ( int i=j; i<=2*j; i++ ) {switch ( i/j ) {case 0:case 1: printf("*"); break;case 2: printf("#");}}A.****## B. ***# C. *# D.

程序设计入门——C语言 第4周编程练习 1 素数和(5分)

题目内容: 我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推. 现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数. 输入格式: 两个整数,第一个表示n,第二个表示m. 输出格式: 一个整数,表示第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数. 输入样例: 2 4 输出样例: 15 时间限制:500ms内存限制:32000kb int n,m; //第几个素数 scan

【网易】 【作业】 程序设计入门—C语言 翁恺 第五周

#include<stdio.h> int sushume(x) { int i=2,ret=0; for(i=2;x%i!=0;i++){;} //printf("%d",i); if (i==x){ret=1;} //printf("%d",ret); return ret; } int main() { int a,i=2,t; scanf("%d",&a); t=a; printf("%d=",a)

程序设计入门——C语言 第6周编程练习 1 分解质因数(5分)

1 分解质因数(5分) 题目内容: 每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数.比如,6可以被分解为2x3,而24可以被分解为2x2x2x3. 现在,你的程序要读入一个[2,100000]范围内的整数,然后输出它的质因数分解式:当读到的就是素数时,输出它本身. 提示:可以用一个函数来判断某数是否是素数. 输入格式: 一个整数,范围在[2,100000]内. 输出格式: 形如: n=axbxcxd 或 n=n 所有的符号之间都没有空格,x是小

程序设计入门—Java语言 第六周编程题 1 单词长度(4分)

第六周编程题 依照学术诚信条款,我保证此作业是本人独立完成的. 1 单词长度(4分) 题目内容: 你的程序要读入一行文本,其中以空格分隔为若干个单词,以'.'结束.你要输出这行文本中每个单词的长度.这里的单词与语言无关,可以包括各种符号,比如"it's"算一个单词,长度为4.注意,行中可能出现连续的空格. 输入格式: 输入在一行中给出一行文本,以'.'结束,结尾的句号不能计算在最后一个单词的长度内. 输出格式: 在一行中输出这行文本对应的单词的长度,每个长度之间以空格隔开,行末没有最后

[程序设计入门—C语言] 数字求特征值

题目是网易云课堂浙大C语言的练习题 题目内容: 对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值.对于一个整数,从个位开始对每一位数字编号,个位是1号,十位是2号,以此类推.这个整数在第n位上的数字记作x,如果x和n的奇偶性相同,则记下一个1,否则记下一个0.按照整数的顺序把对应位的表示奇偶性的0和1都记录下来,就形成了一个二进制数字.比如,对于342315,这个二进制数字就是001101. 按照二进制位值将1的位的位值加起来就得到了结果13. 你的程序要读入一个非负整数,整数的范围是

【网易】 【作业】 程序设计入门—C语言 翁恺 第四周

#include<stdio.h> int main() { int m,n,i=2,tlm=0,tln=0,x=2,count=0,tl=0,q=0,ii=0; scanf("%d %d",&m,&n); q=m-1; for (i=2;count<n;i++) { while(i%x!=0){x+=1;} if (x==i){ tln+=i; count+=1; } x=2; } ii=i-1; x=2,count=0; for (i=2;coun