UVA10791
一个数n的唯一分解式个部分和最小
证明需要知道诶,自己百度
本题
1.long long
2.刘汝佳错了,m应取到等号,否则n==6时是错误的
3.关注pf和n
这俩大于小于1在其中的作用
4.这种放超时的唯一分解定理分解方式要会
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int main()
{ int n,m;
unsigned long long sum;
unsigned long long res;
int pf; int i; int ans=0;
//2147483647
while(cin>>n&&n!=0)
{ ans++;
if(n==1)
{ cout<<"Case "<<ans<<":"<<" 2"<<endl; continue;
}
res=1;
sum=0;
pf=0;
m=floor(sqrt(n)+0.5); //放超时
for(i=2;i<=m;i++)//此时m的可以搜到,用等号,刘汝佳的代码错误
//故此思路很方便,放超时
//如果前面的除完之后还有不为1的n,此处n必定是质数 ,因为小乘大 大的不会超总
//的 若大的为合数,肯定会被小侵蚀
//注意!!!此方法必然超时 WA
{ if(n%i==0)
{ pf++; res=1;
while(n%i==0)
{ n=n/i;
res=res*i;
}
sum+=res;
}
}
if(n>1)**//单独的质数因子 或为本来的质数 n**
pf++, sum+=n;**//加上这个因子**
if(pf<=1)//**为某一个质数的次方或这个数是质数**
cout<<"Case "<<ans<<": "<<sum+1<<endl;
else cout<<"Case "<<ans<<": "<<sum<<endl; }
return 0;
}