简单题,只需要从S开始,从大到小枚举,取第一个所有正因子之和为S的即可。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <vector>
#include <algorithm>
#define ll long long
#define INF 2139062143
#define MAXN 100005
using namespace std;
int S;
bool Judge(int val)
{
int q=sqrt(val+0.5);
int res=0;
for(int i=1; i<=q; ++i)
if(val%i==0)
{
if(i==val/i) res+=i;
else res+=i+val/i;
}
return res==S;
}
int main()
{
int kase=0;
while(scanf("%d",&S)&&S)
{
int ans=-1;
for(int i=S; i>=1; --i)
if(Judge(i))
{
ans=i;
break;
}
printf("Case %d: %d\n",++kase,ans);
}
return 0;
}