📌  相关文章
📜  Q 查询中位于 [L, R] 范围内的所有合数的总和(1)

📅  最后修改于: 2023-12-03 15:34:33.343000             🧑  作者: Mango

查询合数总和

该算法的主要功能是查询在区间 [L, R] 范围内的所有合数的总和。

算法介绍

合数是指除了1和本身之外,还可以被其他数整除的正整数。因此,为了查询所有合数的总和,我们需要在指定区间内枚举每个数字,并检查它是否是合数。如果它是合数,则将其添加到结果中。最终,我们将所有合数的总和返回给调用者。

算法实现

以下是一个示例实现:

// 计算区间 [L, R] 中所有合数的总和
long long sumOfComposite(int L, int R) {
    long long sum = 0;
    for (int i = L; i <= R; i++) {
        if (i < 2) continue; // 1 及以下的数不是合数
        bool isComposite = false;
        for (int j = 2; j * j <= i; j++) {
            if (i % j == 0) {
                isComposite = true;
                break;
            }
        }
        if (isComposite) sum += i;
    }
    return sum;
}

在这个实现中,我们首先从 L 到 R 遍历每个数字。对于每个数字 i,我们检查它是否小于2。如果它小于2,那么它不是合数,我们跳过这个数字。否则,我们遍历从2到√i的所有数字,检查是否能将i整除。如果i能被整除,则它是一个合数,我们将i添加到最终结果中。

使用示例

下面是一个使用示例:

#include <iostream>

using namespace std;

int main() {
    int L = 10, R = 20; // 查询 [10, 20] 范围内的合数总和
    long long sum = sumOfComposite(L, R);
    cout << "Sum of composite numbers in [" << L << ", " << R << "] = " << sum << endl;
    return 0;
}

输出如下:

Sum of composite numbers in [10, 20] = 39

这个程序正确的计算了从10到20之间的所有合数的总和,该值为39。