题目内容:(题目来源:mooc慕课 程序设计入门——C语言)
我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推。
现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。
输入格式:
两个整数,第一个表示n,第二个表示m。
输出格式:
一个整数,表示第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。
输入样例:
2 4
输出样例:
15
时间限制:500ms内存限制:32000kb
代码如下:(编译器为:VS2022)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
//算法
// 定义一个函数isprime判断素数
//1.输入两个变量m,n;(0<n<=m<=200)
//2.定义几个变量i,sum=0;
// 使用while循环,持续找到第n个和第m个素数
//使用定义变量j,记录找到素数的个数:若j>m,即跳出循环,(因为找到的素数已经够了)
// 判断当j>n时,开始累加,当j>m时,停止累加,跳出循环
// 输出sum累加的值
//
//定义一个函数isprime判断素数
int isprime(int a) {
int t;
for (t = 2; t < a; t++) {
if (a % t == 0) {
return 0;
}
}
}
int main() {
int n,m;
scanf("%d,%d", &n,&m);//输入两个变量m,n
int i;
int j=0;
int sum = 0;
while (j < m) { //使用while循环,持续找到前m个素数
for (i = 2; j < m; i++) { //枚举从2开始的所有整数,直到j 不小于 m,循环停止。
printf("i=%d,j=%d,sum=%d\n", i, j, sum); //调试作用,不同位置对比
if (isprime(i)) { //判断此刻的i 的值是否为素数
j += 1; //记录找到的素数的个数
if (j >= n) { //求自第n个素数开始的累加的和
sum += i;
}
//printf("i=%d,j=%d,sum=%d\n", i, j, sum);//调试作用
}
//printf("i=%d,j=%d,sum=%d\n", i, j, sum);//调试作用
}
//printf("i=%d,j=%d,sum=%d\n", i, j, sum);//调试作用
}
printf("%d\n", sum);
return 0;
}
收获:
做题先写算法很重要
遇到不会的立刻去查,比如以上的自定义isprime函数
一定一定一定要自己写代码