1 void check_div(int n) 2 { 3 int num=0; 4 5 while(true) 6 { 7 int in_coming_bit; 8 cin>>in_coming_bit; 9 10 if(in_coming_bit==1) 11 { 12 num=num*2+1; 13 } 14 else if(in_coming_bit==0) 15 { 16 num*=2; 17 } 18 else 19 break; 20 21 if(num%n==0) 22 cout<<"yes"<endl; 23 else 24 cout<<"no"<endl; 25 } 26 } 27 28 29 /* 30 任意一个数都可以表示成:m=a*n+r 31 32 m*p也会使余数r*p:m*p=a*p*n+r*p 33 34 检测m*p后是否整除n,看余数(r*p)%n即可:(m*p)%n=(a*p*n)%n+(r*p)%n=0+(r*p)%n 35 36 当是二进制流时,余数的变化如下: 37 如果新到的是0,则r=(2*r)%n 38 如果新到的是1,则r=(2*r+1)%n 39 40 */ 41 42 43 // 看余数的代码,余数不会很大 44 void check_div(int n) 45 { 46 int num=0; 47 48 while(true) 49 { 50 int in_coming_bit; 51 cin>>in_coming_bit; 52 53 54 if(in_coming_bit==1) 55 { 56 r=r*2+1; 57 } 58 else if(in_coming_bit==0) 59 { 60 r*=2; 61 } 62 else 63 break; 64 65 if(r%n==0) 66 cout<<"yes"<endl; 67 else 68 cout<<"no"<endl; 69 } 70 }