1. 程式人生 > >唯一分解定理應用

唯一分解定理應用

UVA 10791

題意:

輸入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(int
i=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); } } }