题目内容:
我们认为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#include 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 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;}