首页 > 代码库 > Minimum Sum LCM(uva 10791)
Minimum Sum LCM(uva 10791)
题意(就是因为读错题意而wa了一次):给一个数字n,范围在[1,2^23-1],这个n是一系列数字的最小公倍数,这一系列数字的个数至少为2
例如12,是1和12的最小公倍数,是3和4的最小公倍数,是1,2,3,4,6,12的最小公倍数,是12和12的最小公倍数………………
那么找出一个序列,使他们的和最小,上面的例子中,他们的和分别为13,7,28,24……显然最小和为7
/* 我们很容易可以发现,将n唯一分解之后,把所有质因数乘以次数加起来就行了。比如:12=2^2*3^1,那么ans=2^2+3^1=7。这时会出现一个特殊例子,就是将n分解后只有一个质因数,如:5=5^1。这时的ans要加1。*/#include<cstdio>#include<iostream>#include<cmath>using namespace std;int cnt;int main(){ while(1) { ++cnt; int n,sum=0,tot=0; scanf("%d",&n); if(!n)break; for(int i=2;i<=sqrt(n);i++) { int p=0,p2=1; while(n%i==0&&n>1) { n/=i;p++;p2*=i; } if(p)tot++,sum+=p2; if(n==1)break; } if(n>1)tot++,sum+=n; if(tot==1)sum++; printf("Case %lld: %lld\n",cnt,sum); } return 0;}
Minimum Sum LCM(uva 10791)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。