我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推。
现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。
输入格式:
两个整数,第一个表示n,第二个表示m。
输出格式:
一个整数,表示第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。
输入样例:
2 4
输出样例:
15
思路一:先判定是否为素数,再判定是否满足为第n到m个素数,通过计数器加完之后再跳出。
#include <stdio.h>
#include <math.h>
int main() {
int i, j, n, m;
int sum = 0, count = 0;
scanf("%d %d", &n, &m);
for (i = 2;; i++) {
int isPrime = 1;
for (j = 2; j <= (int) sqrt(i); j++) {
if (i % j == 0) {
isPrime = 0;
break;
}
}
if (isPrime == 1) {
count++;
if (count >= n) {//从第n个开始累积
sum += i;
}
}
if (count == m) {//到第m个时停止
break;
}
}
printf("%d", sum);
return 0;
}
思路二:先用一个数组存放第1到第200个素数,再对数组对应项求和。
#include <stdio.h>
#include <math.h>
int Prime(int n);
int main() {
int i, n, m;
int count = 0, sum = 0;
scanf("%d %d", &n, &m);
int p[200];
for (i = 2; count <= 200; i++) {//把素数存入数组
if (Prime(i)) {
p[count++] = i;
}
}
for (i = n - 1; i < m; i++) {
sum += p[i];
}
printf("%d", sum);
return 0;
}
int Prime(int n) {
for (int i = 2; i <= (int) sqrt(n); i++) {
if (n % i == 0) {
return 0;
}
}
return 1;
}