1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| #include<stdio.h>
int max=1e9; long long x[100],y[100];
int gcd(int a,int b){ return b==0?a:gcd(b,a%b); }
int lcm(int a,int b){ return a*(b/gcd(a,b)); }
int gen(long long *num,int a,int b){ long long temp=1; int index=1; num[1]=b; while(temp<=max){ temp=num[index]*a*1LL+b*1LL; num[++index]=temp; } return index; }
int main() { int T; scanf("%d",&T); while(T--){ int a,b,c,d; scanf("%d%d%d%d",&a,&b,&c,&d); int cnt=0; if(a==1&&c==1){ cnt=max / lcm(b, d); } if(a!=1&&c==1){ int index=gen(x,a,b); for(int i=1;i<index;i++){ if(x[i]%d==0) cnt++; } } if(a==1&&c!=1){ int index=gen(y,c,d); for(int i=1;i<index;i++){ if(y[i]%b==0) cnt++; } } if(a!=1&&c!=1){ int index_x=gen(x,a,b); int index_y=gen(y,c,d); for(int i=1;i<index_x;i++){ for(int j=1;j<index_y;j++){ if(x[i]==y[j]){ cnt++; break; } } } } printf("%d\n",cnt); } return 0; }
|