uva 10791

来源:互联网 发布:纸箱设计用什么软件 编辑:程序博客网 时间:2024/06/05 00:08

题意:一个序列的数的LCM值是n,要求输出这个序列的最小和。LCM是指这串序列的最小公倍数。

题解:从小到大找到n所有的因子,因子从2开始到sqrt(n),因为n的因子如果有比sqrt(n)大也只会存在一个,然后分三种情况,已经写在注释中。

#include <stdio.h>#include <string.h>#include <math.h>int main() {long long n, res;int cas = 1;while (scanf("%lld", &n) && n) {res = 0;long long i = 2, temp = n, flag = 0;while (i <= sqrt(n)) {int a = 1;while (temp % i == 0) {a *= i;temp /= i;}if (a != 1) {res += a;flag++;}i++;}if (flag == 1 && temp == 1)//只有一种因子,且除尽res = n + 1;else if (temp != 1 && temp != n)//没有除尽,还有个大于sqrt(n)的因子res += temp;else if (temp == n)//是素数res = n + 1;printf("Case %d: %lld\n", cas++, res);}return 0;}


0 0
原创粉丝点击