题目:求一个数字使得它的因数的和为S,如果有多个找到最大的。
分析:数论。数据范围较小直接将1000内的所有数字对应的S求出,枚举即可。
说明:如果数据较大可使用筛法,注意输出最大的。
#include <stdlib.h>
#include <stdio.h>
int f[1001];
int main()
{
// 打表計算,如果數據較大,需要使用篩法
for (int i = 1; i < 1001; ++ i) {
f[i] = 0;
for (int j = 1; j <= i; ++ j) {
if (i%j == 0) {
f[i] += j;
}
}
}
int n, cases = 1;
while (~scanf("%d",&n) && n) {
int position = -1;
for (int i = 1000; i > 0; -- i) {
if (f[i] == n) {
position = i;
break;
}
}
printf("Case %d: %d\n",cases ++, position);
}
return 0;
}