📅  最后修改于: 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。