很简单的一道题目:
用到了唯一分解定理:
只要把他们的质因数展开式加起来即可!
需要注意的是:
1.只有一个质因子要把1算上。
2.最好结果要保存long long 不然会越界!
3.单独处理1即可。
代码如下:
#include<map>
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
int n,cnt2=0;
while(scanf("%d",&n) == 1 && n){
if (n == 1){printf("Case %d: 2\n",++cnt2);continue;}
map<int,int>m;
for (int i = 2; i <= sqrt(n); ++i){
if (n % i == 0){
m[i]++;
n/=i;
i=1;
}
}
if (n != 1)m[n]++;
double sum = 0;
int cnt = 0;
for (map<int,int>::iterator it = m.begin(); it != m.end(); ++it){sum+=pow(it->first,it->second);++cnt;}
if (cnt == 1)sum=sum+1.0;
printf("Case %d: %lld\n",++cnt2,(long long)sum);
}
return 0;
}