首页 > 代码库 > UVa 10791 最小公倍数的最小和(唯一分解定理)

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

https://vjudge.net/problem/UVA-10791

题意:

输入整数n,求至少两个正整数,使得它们的最小公倍数为n,且这些整数的和最小。

 

思路:

首先对n进行质因数分解,举个例子来说,12=2×2×3,最小和为7,也就是4和3,相同质因子必须放在一起,也就是说这里的2个2必须合在一起变成4,不然2和3会有更小的公倍数6。

 1 #include <iostream>   2 #include <cstring>   3 #include <algorithm>    4 #include <vector> 5 #include <queue> 6 #include <cmath> 7 using namespace std; 8  9 long long n;10 11 int main()12 {13     //freopen("D:\\input.txt", "r", stdin);14     int kase = 0;15     while (~scanf("%d", &n) && n)16     {17         int temp;18         int ret = 0;19         long long ans = 0;20         int m = sqrt(n + 0.5);21         for (int i = 2; i <= m && n > 1; i++)22         {23             if (n%i == 0)24             {25                 temp = 1;26                 while (n%i == 0)27                 {28                     temp *= i;29                     n /= i;30                 }31                 ans += temp;32                 ret++;33             }34         }35         if (n > 1)36         {37             ans += n;38             ret++;39         }40         while (ret < 2)41         {42             ans++;43             ret++;44         }45         printf("Case %d: %lld\n", ++kase, ans);46     }47 }

 

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