本文主要是介绍UVA10791 - Minimum Sum LCM(分解质因子),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
UVA10791 - Minimum Sum LCM(分解质因子)
题目链接
题目大意:给你一个N,x,y,z..(多个数)的最小公倍数是N,希望这些数的和是最小的,输出这个值(因子数至少是2)。
解题思路:将N质因子分解,这样每个数其实就是每个因子的次数方,这样和一定是最小的,因为不会有可以约掉的数。1的时候要注意一下。还要需要用long long,因为当N =2147483648,它是个素数,但是和确实2147483648 + 1超过int。
代码:
#include <cstdio>
#include <cstring>
#include <cmath>typedef long long ll;
int n;ll solve () {int cnt, flag, m;ll ans = 0LL;cnt = flag = 0;m = sqrt(n);for (int i = 2; i <= m; i++) {if (n % i == 0) {cnt = 1;flag++;while (n % i == 0) {cnt *= i;n /= i;}ans += cnt;}if (n == 1)break;}if (n != 1 || (flag == 0)) {ans += n;flag++;}if (flag == 1)ans++;return ans;
}int main () {int cas = 0;while (scanf ("%d", &n) && n) {printf ("Case %d: %lld\n", ++cas, solve());}return 0;
}
这篇关于UVA10791 - Minimum Sum LCM(分解质因子)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!