Luogu1072 Hankson的趣味題
阿新 • • 發佈:2018-11-01
首先要知道\(a*b=gcd(a, b)*lcm(a, b)\)
這就很好推了
\(lcm(x, b0)=b1\)
\(gcd(x, b0)=\frac{x*b0}{b1}\)
右邊化成1
\(gcd(\frac{x}{a1},\frac{a0}{a1})=1, gcd(\frac{b1}{b0}, \frac{b1}{x})=1\)
找b1的因子,只需要找\(\sqrt{b1}\)個然後用b1除算另一個因子。
CODE:
#include <iostream> #include <cstdio> using namespace std; int n, a0, a1, b0, b1, x; int gcd(int a, int b){ return b?gcd(b, a%b):a; } int main(){ scanf("%d", &n); while(n--){ scanf("%d%d%d%d", &a0, &a1, &b0, &b1); int cnt=0; for(int i=1; i*i<=b1; i++) if(b1%i==0){ if(i%a1==0 && gcd(i/a1, a0/a1)==1 && gcd(b1/b0, b1/i)==1) cnt++; x=b1/i; if(x==i) continue; if(x%a1==0 && gcd(x/a1, a0/a1)==1 && gcd(b1/b0, b1/x)==1) cnt++; } printf("%d\n", cnt); } return 0; }