最小倍数的最小和(Uva 10791) (唯一分解定理)

xiaoxiao2021-02-28  48

题意:求至少两个正整数,它们的最小公倍数为n,求这些整数的和最小值……

由唯一分解定理可知:n=a1^p1*a2^p2……*an^pn,当两两互质的时候,即ai^pi单独出现的时候最优。数据范围很大,注意避免溢出

#include<bits/stdc++.h> using namespace std; int main() { int n,k=0; while(scanf("%d",&n)==1&&n) { if(n==1) printf("Case %d: 2\n",++k); else { int m=(int)sqrt(n+0.5); int j=0; long long cnt=0; for(int i=2;i<=m;i++) { if(n%i==0) { j++; int ans=1; while(n%i==0) { ans*=i; n/=i; } cnt+=ans; } } if(j==0) cnt=(long long)n+1; else if(j==1||n>1) cnt+=n; printf("Case %d: %lld\n",++k,cnt); } } return 0; }

 

转载请注明原文地址: https://www.6miu.com/read-2630633.html

最新回复(0)