UVA - 10791 Minimum Sum LCM
2013-10-16 00:32
351 查看
题意:给出一个n,如果几个数的最小公倍数是n的话,那么sum就是这几个数的和,求最小的sum,根据唯一分解定理,一个数可以唯一的分解为n=p1^a1*p2^a2....,确定最小公倍数是由每个素数的次方的最高决定,所以这是唯一确定的,接下来就是怎么凑成数,使得相加最小,因为a*b>a+b,这个不等式的意思是:如果将两个素因子乘在一个是不如分开好的,所以在程序中,我们只要逐一累加最高次数的那个数就行了,还有一个注意的地方:当N=2147483647时,它是一个素数,此时输出2147483648,但是它超过int范围,应考虑用long
long。
long。
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> using namespace std; int main(){ int n,t = 1; long long sum; while (scanf("%d",&n) && n){ printf("Case %d: ",t++); int m = sqrt(n)+2; int tmp = n,cnt = 0; sum = 0; for (int i = 2; i <= m; ++i){ if (tmp % i == 0){ ++cnt; int cur = 1; while (tmp % i == 0){ cur *= i; tmp /= i; } sum += cur; } } if (tmp == n) sum = (long long)n + 1; else if (cnt == 1 || tmp != 1) sum += tmp; printf("%lld\n",sum); } return 0; }
相关文章推荐
- [UVa 10791]Minimum Sum LCM
- UVa 10791 - Minimum Sum LCM
- UVA 10791 - Minimum Sum LCM(坑)
- Minimum Sum LCM UVA - 10791 思维题
- UVA 10791 - Minimum Sum LCM
- UVa 10791 Minimum Sum LCM
- Minimum Sum LCM - UVa 10791
- UVa 10791 Minimum Sum LCM
- UVA 10791 - Minimum Sum LCM
- UVa10791 - Minimum Sum LCM
- UVA 10791 Minimum Sum LCM
- UVa 10791 Minimum Sum LCM
- UVa 10791 - Minimum Sum LCM (数论 推理)
- UVA 10791 Minimum Sum LCM
- UVA 10791 Minimum Sum LCM(素因子)
- UVA 10791 Minimum Sum LCM 唯一分解定理
- Minimum Sum LCM(UVA 10791)
- uva 10791【 Minimum Sum LCM】
- UVA 10791 Minimum Sum LCM (数论)
- UVA 10791 - Minimum Sum LCM(因子分解)