直接O(n^2)暴力预处理出1-1000内数的因子和即可。对于大于1000的数完全不需要去考虑,原因是显然的,一个数的因子之和必然大于自身(质数为自身加一,1为自身)。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int ans[1010];
void init()
{
memset(ans,-1,sizeof(ans));
for(int i=1;i<=1000;i++)
{
int tmp=0;
for(int j=1;j<=i;j++) if(i%j==0)
tmp+=j;
if(tmp<=1000) ans[tmp]=i;
}
}
int main()
{
freopen("in.txt","r",stdin);
init();
int n,kase=1;
while(cin>>n&&n)
{
printf("Case %d: %d\n",kase++,ans[n]);
}
return 0;
}