1 solutions
-
1
思路
如果暴力找 和 ,肯定会 TLE()
但是,众所(不一定)周知,最大公因数和最小公倍数与原数之间有个公式:(gcd 是最大公因数,lcm 是最小公倍数)。所以,根据这个公式,我们就可以少一个循环,变成 。
代码
#include <bits/stdc++.h> #define int long long using namespace std; int cnt; int gcd(int x,int y){ if (y > x) swap(x,y); if (x % y == 0) return y; return gcd(y,x % y); } signed main(int argc, char **argv){ int x,y; cin >> x >> y; for (int i = x;i <= y;i++){ if ((x * y) % i == 0 && gcd(i,x * y / i) == x) cnt++; } cout << cnt; return 0; }
花絮
做的时候把 Line 6 的 和 写反了,改了好久 QAQ
- 1
Information
- ID
- 1123
- Time
- 1000ms
- Memory
- 125MiB
- Difficulty
- 8
- Tags
- # Submissions
- 32
- Accepted
- 5
- Uploaded By