【发布时间】:2019-01-08 09:24:10
【问题描述】:
我正在尝试在给定范围 a、b a c 的所有除数的总和。
我尝试从a 循环到b 并将c 的所有除数相加,但这似乎效率低下,因为a 和b 之间的绝对差可以是10^9。
有没有办法降低这种方法的时间复杂度?
int a, b, c;
cin >> a >> b >> c;
long long sum = 0;
for (int i = a; i <= b; i++) {
if (i % c == 0) {
ans += i;
}
}
cout << sum << endl;
【问题讨论】:
-
您可以尝试找到
c的素因数分解,然后从中导出所有可能的除数(在[a, b]范围内)。不过,这要复杂得多。 -
...并且您需要考虑可能的重复项(例如,如果您将任何因子与任何其他因子配对,则 4 将出现多次,且素数分解为 2、2、2)。
-
@Aconcagua “工作”是一个主观形容词,如果您没有指定接受标准。在这里,OP 明确指出他们的实现不够高效:然后需要更正。这是正题。如果你不确定,你可以在Meta Stack Overflow问。
标签: c++ algorithm time-complexity