神奇的树
Time Limit: 1000MS Memory limit: 65536K
题目描述
SDUT有一颗神奇的苹果树。假如某天早上这树上有x个苹果,那么这树这一天会再结出x个苹果来,也就是说到了晚上会有2*x个苹果,到了深夜,会有专人人来摘苹果,而摘苹果的人总会使苹果数剩下当前数量对m的余数,也就是说假如当前数量为a,那么第二天早上会剩下a%m个苹果。也许聪明的你已经发现了,有可能从某一天开始,这棵树上就再也没有苹果了。那么给你第一天早上的苹果数,请你判断一下是否存在这一天,从这一天开始就再也没有苹果了。如果一直存在的话输出Yes,否则输出No。
输入
多组测试数据。每组测试数据都是一行两个整数,x和m。x表示第一天早上的
苹果树,m表示余数。1<=x,m<=10^5.
输出
每组测试数据输出单独一行,Yes或No。
示例输入
1 53 6
示例输出
NoYes 题意: 假如早上苹果的数量为a,这一天会再结出a个苹果,到了晚上会有2a个,那么第二天早上会剩下2a%m个苹果,问是否有可能早上的苹果的数目会为0,也就是说被摘了。 如果可以被摘了,则输出Yes,否则输出No。
1 #include2 #include 3 int s[1001000]; 4 int main() 5 { 6 int n, m, flag; 7 while(~scanf("%d%d", &n, &m)) 8 { 9 memset(s, 0, sizeof(s)); 10 n = n*2; 11 flag = 0; 12 while(!s[n%m]) 13 { 14 s[n%m]=1; 15 n = n%m; 16 n = n*2; 17 if(n%m==0) 18 { 19 printf("Yes\n"); 20 flag = 1; 21 break; 22 } 23 } 24 if(flag) continue; 25 printf("No\n"); 26 } 27 return 0; 28 }