昨晚的模拟赛很好啊
T1:Super GCD
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 #include<cmath> 6 using namespace std; 7 struct bignum{ 8 int a[205],len; 9 bignum(){ 10 memset(a,0,sizeof a); 11 len=0; 12 } 13 bignum(int x){ 14 memset(a,0,sizeof a);len=0; 15 while(x){ 16 a[++len]=x%10; 17 x/=10; 18 } 19 } 20 void div(){ 21 for(int i=len;i;i--){ 22 if((i>1)&&(a[i]&1))a[i-1]+=10; 23 a[i]>>=1; 24 } 25 while(len>1&&!a[len])len--; 26 } 27 bignum operator - (bignum b){ 28 bignum c; 29 c.len=max(len,b.len); 30 for(int i=1;i<=c.len;i++){ 31 c.a[i]+=a[i]-b.a[i]; 32 if(c.a[i]<0){ 33 c.a[i]+=10; 34 a[i+1]--; 35 } 36 } 37 while(c.a[c.len+1])c.len++; 38 while(c.len>1&&!c.a[c.len])c.len--; 39 return c; 40 } 41 bool operator < (const bignum & b)const{ 42 if(b.len>len)return 1; 43 for(int i=len;i;i--){ 44 if(b.a[i]>a[i])return 1; 45 if(b.a[i]<a[i])return 0; 46 } 47 return 0; 48 } 49 }A,B,C,tmpl,tmpr,tmpm,one; 50 int T,la,lb; 51 char sa[205],sb[205]; 52 int main(){ 53 scanf("%d",&T); 54 one=1; 55 while(T--){ 56 scanf("%s%s",sa+1,sb+1); 57 la=strlen(sa+1);lb=strlen(sb+1); 58 memset(A.a,0,sizeof A.a); 59 memset(B.a,0,sizeof B.a); 60 A.len=la;B.len=lb; 61 for(int i=1;i<=la;i++)A.a[la-i+1]=sa[i]-'0'; 62 for(int i=1;i<=lb;i++)B.a[lb-i+1]=sb[i]-'0'; 63 if(A.a[1]%2==0&&B.a[1]%2==0){puts("No");continue;} 64 while(A.a[1]%2==0)A.div(); 65 while(B.a[1]%2==0)B.div(); 66 while(1){ 67 if(A<B){C=A;A=B;B=C;} 68 if(B.len==1&&B.a[1]==0)break; 69 A=A-B; 70 while((A.len!=1||A.a[1]!=0)&&A.a[1]%2==0)A.div(); 71 } 72 if(A.len==1&&A.a[1]==1)puts("Yes"); 73 else puts("No"); 74 } 75 return 0; 76 }