四种情况要特殊考虑,
一种是n是质数,输出n+1;
第二种n是质数的次方,输出n+1;
第三种n=1,输出2
第四种n=2147483647,要输出n+1,但是超int了,要开long long
其他的都不是问题
#include<stdio.h>
#include<math.h>
#include<string.h>
#define LL long long
const int maxn=100000;
int pri[maxn],vis[maxn];
void getpri()
{
int i,j,k;
for(i=2;i*i<maxn;i++)if(!vis[i])
for(j=i*i;j<maxn;j+=i)vis[j]=1;
for(i=2,j=0;i<maxn;i++)if(!vis[i])
pri[j++]=i;
}
LL calcu(int n)
{
int i,j,k,tmp;
long long ans=0;
int sqr=sqrt(n+0.5);
for(i=0;pri[i]<=sqr;i++)
if(n%pri[i]==0)
{
tmp=1;
while(n%pri[i]==0)
{
n/=pri[i];
tmp*=pri[i];
}
ans+=tmp;
if(n==1)break;
}
if(n>1)ans+=n;
return ans;
}
int main()
{
int i,j,n,k=1;
printf("%d\n",(1<<31)-1);
getpri();
while(scanf("%d",&n)!=-1&&n)
{
printf("Case %d: ",k++);
LL ans=calcu(n);
if(ans==n)ans++;
if(n==1)ans=2;
printf("%lld\n",ans);
}
return 0;
}