Arcane Numbers 1
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
Submit Status Practice HDU 4320
Description
Vance and Shackler like playing games. One day, they are playing a game called "arcane numbers". The game is pretty simple, Vance writes down a finite decimal under base A, and then Shackler translates it under base B. If Shackler can translate it into a finite decimal, he wins, else it will be Vance’s win. Now given A and B, please help Vance to determine whether he will win or not. Note that they are playing this game using a mystery language so that A and B may be up to 10^12.
Input
The first line contains a single integer T, the number of test cases.
For each case, there’s a single line contains A and B.
Output
For each case, output “NO” if Vance will win the game. Otherwise, print “YES”. See Sample Output for more details.
Sample Input
3
5 5
2 3
1000 2000
Sample Output
Case #1: YES
Case #2: NO
Case #3: YES
1 #include <stdio.h> 2 #include <string.h> 3 #include <algorithm> 4 using namespace std; 5 6 long long gcd(long long a,long long b) 7 { 8 if(a<b) 9 return gcd(b,a); 10 else if(b==0) 11 return a; 12 else 13 return gcd(b,a%b); 14 } 15 16 int main() 17 { 18 int T,ca=1; 19 long long A,B; 20 int i,j,k,flg; 21 scanf("%d",&T); 22 while(T--) 23 { 24 scanf("%I64d %I64d",&A,&B); 25 long long C=gcd(A,B),D; 26 A=A/C,B=B/C; 27 flg=1; 28 if(B>1) 29 { 30 while(1) 31 { 32 if(B==1) 33 break; 34 D=gcd(B,C); 35 if(D==1) 36 { 37 flg=0; 38 break; 39 } 40 B=B/D; 41 } 42 } 43 if(A>1) 44 { 45 while(1) 46 { 47 if(A==1) 48 break; 49 D=gcd(A,C); 50 if(D==1) 51 { 52 flg=0; 53 break; 54 } 55 A=A/D; 56 } 57 } 58 if(flg==1) 59 printf("Case #%d: YES\n",ca); 60 else 61 printf("Case #%d: NO\n",ca); 62 ca++; 63 } 64 return 0; 65 }