首页 > 代码库 > 神奇的树

神奇的树

神奇的树 

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 #include<stdio.h>   2 #include<string.h>   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 }  

 

神奇的树