正在载入在线练习界面,本页内容可直接阅读…

AK CSP › CSP-J 2024 第一轮真题 › 第 18 题

CSP-J 2024 第一轮 第 18 题:程序(一):sumPrimes 是否计算 2 到 n 之间所有素数之和

阅读程序 · 初等数论 · 难度 中等 · 答案 √

题目

#include <iostream>
using namespace std;

bool isPrime(int n) {
    if (n <= 1) {
        return false;
    }
    for (int i = 2; i * i <= n; i++) {
        if (n % i == 0) {
            return false;
        }
    }
    return true;
}

int countPrimes(int n) {
    int count = 0;
    for (int i = 2; i <= n; i++) {
        if (isPrime(i)) {
            count++;
        }
    }
    return count;
}

int sumPrimes(int n) {
    int sum = 0;
    for (int i = 2; i <= n; i++) {
        if (isPrime(i)) {
            sum += i;
        }
    }
    return sum;
}

int main() {
    int x;
    cin >> x;
    cout << countPrimes(x) << " " << sumPrimes(x) << endl;
    return 0;
}
CSP-J 2024 第一轮 第 18 题 原题
原题扫描(页面加载后可直接在线作答)

本小题

sumPrimes 函数计算的是从 $2$ 到 $n$ 之间的所有素数之和。

选项

  • √. 正确
  • ×. 错误

答案

√

题解

答案:√ 正确。

sumPrimes(n) 的执行过程是:

  1. sum = 0,初始化总和。
  2. 遍历 i = 2 到 n(包含 n)。
  3. 如果 isPrime(i) 判断 i 是素数,就执行 sum += i,将它加入总和。
  4. 最后返回 sum。

例如,n = 10 时,素数有 2、3、5、7,返回的结果为: \[ 2+3+5+7=17 \]

所以,这个函数计算的就是从 $2$ 到 $n$ 的所有素数之和。

真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1 京公网安备11010502062986号