给一个S, 求满足正约数的和是S的最大整数
直接预处理一个答案数组即可
代码:
# include <iostream>
# include <algorithm>
# include <cstdio>
# include <cstring>
# include <cmath>
using namespace std;
typedef long long LL;
const int maxn = 1e3 + 5;
int ans[maxn];
int s;
void init() {
memset(ans, -1, sizeof ans);
for (int i = 1; i <= 1000; ++i) {
int t = sqrt(i + 0.5);
int sum = 0;
for (int j = 1; j <= t; ++j) {
if (i % j == 0) {
sum += j; if (i / j != j) sum += i / j;
}
}
if (sum < maxn) ans[sum] = i;
}
}
int main(void)
{
init(); int Case = 0;
while (~scanf("%d", &s) && s)
printf("Case %d: %d\n", ++Case, ans[s]);
return 0;
}