UVA 10791 Minimum Sum LCM
Posted 神犇(shenben)
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVA 10791 Minimum Sum LCM相关的知识,希望对你有一定的参考价值。
UVA - 10791
|
Problem descriptions:
|
题意:
求最小公倍数为n的数的和的最小值。
如12:(3,4),(2,6),(1,12)最小为7
题解:
唯一分解定理的模板
要想a1,a2,a3……an的和最小,要保证他们两两互质,只要存在不互质的两个数,就一定可以近一步优化
只是当n=1时,答案为2,而且可能会超,要用long long
AC代码:
#include<cstdio> #include<cmath> #include<vector> using namespace std; #define ll long long #define pir pair<ll,ll> vector<pir> f;ll n,cas; void deal(ll x){ f.clear(); ll m=floor(sqrt(x)+0.5); for(ll i=2;i<=m;i++){ if(x%i) continue; ll q=0; while(x%i==0) q++,x/=i; f.push_back(make_pair(i,q)); } if(x>1) f.push_back(make_pair(x,1)); } ll fpow(ll a,ll p){ ll res=1; for(;p;p>>=1,a=a*a) if(p&1) res=res*a; return res; } void out(){ ll ans=0,size=f.size(); for(ll i=0;i<size;i++) ans+=fpow(f[i].first,f[i].second); if(size==1) ans++; printf("Case %lld: ",++cas); printf("%lld\n",ans); } int main(){ while(~scanf("%lld",&n)){ if(!n) break; if(n==1) {printf("Case %lld: 2\n",++cas);continue;} deal(n);out(); } return 0; }
以上是关于UVA 10791 Minimum Sum LCM的主要内容,如果未能解决你的问题,请参考以下文章
[质因数分解]UVa10791 Minimum Sum LCM
UVA - 10791 Minimum Sum LCM(最小公倍数的最小和)