题解 009 题目 P1072

· · 题解

题目分析

部分分代码

#include<bits/stdc++.h>
using namespace std;
int n;
int gcd(int a,int b){
    return __gcd(a,b); // 内置函数。 
}
int lcm(int a,int b){
    return a/gcd(a,b)*b; // 防止超过 int 范围。 
}
int main(){
    ios::sync_with_stdio(false);
    cin>>n;
    while (n--){
        int a0,a1,b0,b1,ans=0;
        cin>>a0>>a1>>b0>>b1;
        for (int i=1;i<=b1;i++){
            if (gcd(i,a0)==a1&&lcm(i,b0)==b1) ans++;
        }
        cout<<ans<<"\n";
    }
    return 0;
}

优化

通过代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n;
int gcd(int a,int b){
    return __gcd(a,b); // 内置函数。 
}
int lcm(int a,int b){
    return a/gcd(a,b)*b; // 防止超过 int 范围。 
}
int main(){
    ios::sync_with_stdio(false);
    cin>>n;
    while (n--){
        int a0,a1,b0,b1,ans=0;
        cin>>a0>>a1>>b0>>b1;
        for (int i=1;i<=b1/i;i++){
            if (b1%i!=0) continue; // 枚举约数。
            if (gcd(i,a0)==a1&&lcm(i,b0)==b1) ans++;
            if (b1!=i*i){ // 注意排除特殊情况。
                if (gcd(b1/i,a0)==a1&&lcm(b1/i,b0)==b1) ans++;
            }
        }
        cout<<ans<<"\n";
    }
    return 0;
}