luogu P1072 Hankson的趣味题

题目链接

luogu P1072 Hankson 的趣味题

题解

啊,还是noip的题好做
额,直接推式子就好了
\(gcd(x,a_0)=a_1=gcd(\frac{x}{a_1},\frac{a_0}{a_1})\)
额....上面这个式子似乎没用,看b的
\(lcm(x,b_0)=\frac{x*b_0}{gcd(x,b_0)}=b1\)
那么\(gcd(x,b_0)=\frac{x*b_0}{b_1}\)
\(gcd(\frac{b_1}{b_0},\frac{b_1}{x})=1\)
显然\(x,b_0\)\(b_1\)约数且\(\frac{b_1}{b_0},\frac{b_1}{x}\)互质
枚举\(b_1\)的约数判断是否满足条件
复杂度\(O(\sqrt{n})\)

代码

// luogu-judger-enable-o2
#include<cstdio>
#include<algorithm>
using std::__gcd;
int main() {
    int a;
    scanf("%d",&a);
    for(int a0,a1,b0,b1,ans;a--;) {
        ans=0;
        scanf("%d%d%d%d",&a0,&a1,&b0,&b1);
        for(int x=1;x*x<=b1;x++) 
            if(!(b1%x)) {
                if(__gcd(x,a0)==a1&&__gcd(b1/x,b1/b0)==1) ans++;
                if(x*x==b1) continue; 
                int y=b1/x;
                if(__gcd(y,a0)==a1&&__gcd(b1/y,b1/b0)==1) ans++;
            }
        printf("%d\n",ans);
    }
    return 0;
}
posted @ 2018-02-09 21:48  zzzzx  阅读(149)  评论(0编辑  收藏  举报