题目内容:

我们认为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;}