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

最简单的就是枚举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 }
代码君

相关文章:

  • 2021-09-22
  • 2021-11-22
  • 2022-03-04
  • 2021-11-02
  • 2022-12-23
  • 2021-07-18
  • 2021-10-28
  • 2022-02-08
猜你喜欢
  • 2022-12-23
  • 2020-06-26
  • 2021-07-16
  • 2022-01-10
  • 2022-12-23
  • 2022-12-23
  • 2022-02-01
相关资源
相似解决方案