在一座山上有n个山洞(每个洞从0~n-1分别编号),这山上有一只兔子躲在山洞里,有一只狼,从编号为0的山洞开始入洞,每隔m个洞,再次入洞抓兔子,现在兔子想知道是否有能避免这场灾难的山洞?
例如:m=2 and n=6, 狼将要进入的山洞号为:0,2,4,可避难的山洞为:1,3,5;
- 输入
- 有多组测试数据,不超过11组;
每组有两个整数m,n(0<m,n<=10000000);
注意:程序以文件结束符“EOF”结束输入。
输出
- 兔子能避免这场灾难输出可避难山洞的总数和所有可避难山洞的编号(从小到大输出),否则输出NO; 样例输入
-
1 2
2 2
样例输出
-
NO
1 1#include <iostream> #include<cstdio> using namespace std; int gcd(int m, int n) { return n==0?m:gcd(n,m%n); } int main() { freopen("1.txt","r",stdin); int m,n; while(scanf("%d%d",&m,&n)==2) { int g=gcd(m,n); if(g==1) { puts("NO"); } else { printf("%d", n - n / g); for(int i = 1; i <= n; i++) { if(i % g != 0) printf(" %d", i); } puts(""); } } }
本文探讨了一只兔子如何利用数学原理,在被狼以一定规律追逐的情况下,找到可以躲避的山洞。通过计算最大公约数(GCD)和周期性规律,我们发现兔子可以通过选择特定的山洞来避免被抓住。具体来说,当山洞数量与追逐间隔的最大公约数不相同时,兔子可以安全躲藏。
593

被折叠的 条评论
为什么被折叠?



