给一个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;
}
本文介绍了一种通过预处理方法找到给定正约数和S对应最大整数的算法实现。该算法首先初始化一个答案数组,通过遍历1到1000之间的所有整数并计算它们的正约数之和,将这些和作为索引存入数组中。

被折叠的 条评论
为什么被折叠?



