题意:输入整数N,求至少两个正整数是他们的最小公倍数是N,且整数和最小,输出最小和。
题解:利用唯一分解定理求解,坑点有只有一个单因子的时候加一,n=1是输出2。一直wa了很多次的原因是题意的理解错了,对于16这种数我写成了2+2+2+2,但是相同的数最小公倍数并不是N,16应为2^4+1=17。还是太菜了吧。
AC代码:
#include<cstdio>
#include<cstring>
using namespace std;
long long n;
long long m;
int main()
{
int hh=1;
while(scanf("%lld",&n))
{
if(!n)break;
m=0;
long long k=0;
long long g=n;
long long ans;
for(long long i=2;i*i<=n;i++)
{
ans = 1;
if(n%i==0)
{
k++;
while(n%i==0)
{
n/=i;
ans*=i;
}
m+=ans;
}
if(n==1)break;
}
if(n!=1)m+=n;
else if(k==1)m=m+1;
if(k==0)m=g+1;
printf("Case %d: %llu\n",hh++,m);
}
return 0;
}