1 条题解

  • 1
    @ 2024-3-16 19:16:05

    合法的PPQQ除了满足题目中的第2条件,还一定满足:

    gcd(P,Q)×lcm(P,Q)=x0×y0gcd(P,Q) \times lcm(P,Q) = x_0 \times y_0

    这也是最大公因数和最小公倍数的一条定理。

    这就代表了,合法的PPQQ,一定是(x0×y0)(x_0 \times y_0)的一对因数。我们枚举它的每一对因数,只要它满足题目中的第2条件就将答案+2+2,因为(a,b)(a,b)(b,a)(b,a)是两组不同的解(可参考样例说明)。

    AC code:

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    ll x,y,k,ans;
    ll __lcm(ll a,ll b){
        return a/__gcd(a,b)*b;
        // 注意这个地方尽量不要写成a*b/__gcd(a,b),防止a*b溢出
    }
    int main(){
        scanf("%lld%lld",&x,&y);
        k=x*y;
        for(ll i=1;i*i<=k;i++)
            if(k%i==0){
                ll j=k/i;
                if(__gcd(i,j)==x&&__lcm(i,j)==y)
                    // 记得特判,i和j相同的话只能算作1组解
                    if(i==j)
                        ans++;
                    else
                        ans+=2;
            }
        printf("%lld",ans);
        return 0;
    }
    
    • 1

    [NOIP2001 普及组] 最大公约数和最小公倍数问题

    信息

    ID
    606
    时间
    1000ms
    内存
    125MiB
    难度
    3
    标签
    递交数
    113
    已通过
    59
    上传者