2 条题解
-
1
x 一定是 b1 的约束
一个数的约数一定小于 2
所以枚举到 即可
而一个数的约束其实更少只有几千
所先看每个数是否是约束在看其他条件符合吗
#include<bits/stdc++.h> using namespace std; #define endl "\n" #define int long long #define d double #define ld long double const int MAXN=200000; const int MAXM=500000; const int MAXQ=500000; const int INF=0x1f1f1f1f1f1f1f1f; int gcd(int a,int b) { if(a<b) swap(a,b); if(b==0) return a; return gcd(b,a%b); } int lcm(int a,int b) { return a*b/gcd(a,b); } int T; int a0,a1,b0,b1; signed main() { ios::sync_with_stdio(false); cin.tie(0); cin>>T; while(T--) { cin>>a0>>a1>>b0>>b1; int cnt=0; for(int i=1;i*i<=b1;i++) if(b1%i==0) { if(lcm(b0,i)==b1&&gcd(i,a0)==a1) cnt++; if(i*i!=b1&&b1%i==0&&lcm(b0,b1/i)==b1&&gcd(b1/i,a0)==a1) cnt++; } cout<<cnt<<endl; } return 0; }
-
0
#include <bits/stdc++.h> using namespace std; int T; int a0, a1, b0, b1; int gcd(int a, int b) { if (b == 0) return a; return gcd(b, a % b); } int lcm(int a, int b) { return a / gcd(a, b) * b; } int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> T; while (T--) { cin >> a0 >> a1 >> b0 >> b1; int cnt = 0; for (int i = 1; i * i <= b1; i++) if (b1 % i == 0) { if (lcm(i, b0) == b1 && gcd(i, a0) == a1) cnt++; if (i * i != b1) { int ii = b1 / i; if (lcm(ii, b0) == b1 && gcd(ii, a0) == a1) cnt++; } } cout << cnt << "\n"; } return 0; }
- 1
信息
- ID
- 105
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 5
- 标签
- 递交数
- 29
- 已通过
- 13
- 上传者