唯一分解定理應用
阿新 • • 發佈:2018-11-17
題意:
輸入n,求最少兩個數,使得他們的最小公倍數為n,使他們的和最小。
分析:根據唯一分解定理,可以得出 N = p1^n1 * p2^n2 *...* pn^nn
即:當把pi^n1看成整體時和最小。
程式碼:
#include<stdio.h> #include<iostream> #include<algorithm> #include<string.h> #include<math.h> using namespace std; typedef long long ll;int main() { int t=1; ll n; while(cin>>n) { if(!n) break; printf("Case %d: ",t); t++; if(n==1) { printf("2\n"); continue; } ll sum=0,ant=0,temp; int max_=sqrt(n+1); for(inti=2;i<=max_;i++) { int temp=1; if(n%i==0) { ant++; while(n%i==0) { temp*=i; n/=i; } sum+=temp; } // cout<<temp<<endl;if(n==1) break; } // cout<<ant<<endl; if(ant==0) { printf("%lld\n",n+1); } else if(ant==1||n!=1) { printf("%lld\n",sum+n); } else { printf("%lld\n",sum); } } }