这题应该算是水题,不过需要注意一点,就是约数。像4的约数是1,2,4,可不是1,2,2,4。我做的时候忽略了后一种情况,WA了两次才发现。知道这一点后,剩下的就是把中文翻译成代码了.....
#include <iostream>
#include <cmath>
using namespace std;
int sigma(int n) {
int sum = 0;
int mid = sqrt((double)n);
for (int i = 1; i <= mid; ++i) {
if (n%i == 0) {
sum += i;
if (n/i != i) //如4 = 2*2,约数只能算一个2,不能是两个2!
sum += n/i;
}
}
return sum;
}
int main()
{
int t;
cin >> t;
while (t--) {
int x, y;
cin >> x >> y;
int max = -1, maxab;
while (x <= y) {
maxab = sigma(x) - 2 * x;
if (maxab > 0 && maxab > max)
max = maxab;
x++;
}
cout << max << endl;
}
return 0;
}