/*
* 解题思路:
* 题意比较好理解,就是求给出的step和mod能不能求到0~mod-1的所有数字,因为给出的两个数字可能达到千万级
* 所以标记数组不可以使用int 类型,会爆栈,使用char类型可以AC
* 在网上看了别人的解法才发现这题只要是考察,step和mod两个数若互质则就是Godd,否则ad
*/
#include <stdio.h> #include <string.h> #define A 10000005 char vis[ A ]; int main( ) { int m,n; int tmp,i,flag; while( ~scanf("%d%d",&m,&n) ) { memset( vis , ‘0‘ , sizeof(vis) ); vis[ m%n ] = ‘1‘; tmp = m%n ; while( 1 ) { if( vis[ (tmp+m)%n ] != ‘0‘ ) break; vis[ (tmp+m)%n ] = ‘1‘; tmp = (tmp+m)%n; } for( i=flag=0;i<n;i++ ) if( vis[ i ] == ‘0‘ ) flag = 1; if( flag ) printf("%10d%10d Bad Choice\n\n",m,n); else printf("%10d%10d Good Choice\n\n",m,n); } return 0; }
原文:http://blog.csdn.net/u011886588/article/details/19483221