题意是说从 0 开始每次增加 STEP,然后模 MOD 得到一些数,问是否能得到从 0 到 MOD - 1 的所有数。
只要 STEP 与 MOD 互质就可以满足条件,也就是二者的最大公因数为 1 即可。
但是这道题对于输出的格式要求很高,少见的右对齐(自从发现 cin / cout 比 scanf / printf 慢很多就没再使用过 setw() )个人对 scanf 和 printf 的右对齐输出掌握的不好,所以输出调整格式显得很繁琐……
代码如下:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 #include <bits/stdc++.h> 2 using namespace std; 3 int gcd(int a,int b) 4 { 5 return !b?a:gcd(b,a%b); 6 } 7 int main() 8 { 9 int step,mod; 10 while(~scanf("%d%d",&step,&mod)) 11 { 12 if(gcd(step,mod)==1) 13 { 14 printf("%*d",10,step); 15 printf("%*d Good Choice\n",10,mod); 16 } 17 else 18 { 19 printf("%*d",10,step); 20 printf("%*d Bad Choice\n",10,mod); 21 } 22 printf("\n"); 23 } 24 return 0; 25 }