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 }