首页 > 其他 > 详细

UVa 10892 (GCD) LCM Cardinality

时间:2015-03-22 00:13:27      阅读:363      评论:0      收藏:0      [点我收藏+]

我一直相信这道题有十分巧妙的解法的,去搜了好多题解发现有的太过玄妙不能领会。

最简单的就是枚举n的所有约数,然后二重循环找lcm(a, b) = n的个数

技术分享
 1 #include <cstdio>
 2 #include <vector>
 3 #include <algorithm>
 4 using namespace std;
 5 
 6 int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }
 7 
 8 int lcm(int a, int b) { return a / gcd(a, b) * b; }
 9 
10 int main()
11 {
12     //freopen("in.txt", "r", stdin);
13 
14     int n;
15     while(scanf("%d", &n) == 1 && n)
16     {
17         vector<int> a;
18         for(int i = 1; i * i <= n; i++) if(n % i == 0)
19         {
20             if(i * i == n) a.push_back(i);
21             else { a.push_back(i); a.push_back(n / i); }
22         }
23         sort(a.begin(), a.end());
24         int num = a.size(), ans = 0;
25         for(int i = 0; i < num; i++)
26             for(int j = i; j < num; j++)
27                 if(lcm(a[i], a[j]) == n)
28                     ans++;
29         printf("%d %d\n", n, ans);
30     }
31 
32     return 0;
33 }
代码君

 

UVa 10892 (GCD) LCM Cardinality

原文:http://www.cnblogs.com/AOQNRMGYXLMV/p/4356542.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!