Eeny Meeny Moo
大家都有这种经验,当太多的人同时使用互联网的时候,网络会变得非常,非常缓慢。为了结决这一问题,北师大制定了一项应急计划,在网络使用高峰期切断一些连接以保证网络的畅通。所有的网络连接都将被标号(从1开始,依次是2号,3号……)。当应急计划启动的时候,首先切断1号连接,然后切断1号之后的第M个连接,在然后是上一个被切断之后的第M个连接,以此类推。例如,如果有17个连接,并且M=5,则依次切断的顺序为[1,6,11,16,5,12,2,9,17,10,4,15,14,3,8,13,7]。DXY同学大公无私地将自己的机器设置为1连接,而ZSL同学的机器为2号连接。原本这种切断连接的方式是很公平的,不过ZSL同学想要知道当M为多少时,他的机器会被最后一个切断连接(他果然很不厚道)。
Input
输入不止一行,每一行都只有一个无符号整数N,且 3 <= n < 150。当输入0的时候程序退出。
Output
对于每一行的输入,输出一个最小的值M,满足ZSL同学的2号连接会被最后一个切断。
Sample Input
3 4 5 6 7 8 9 10 11 12 0
Sample Output
2 5 2 4 3 11 2 3 8 16
#include<iostream> #include<algorithm> #include<stdio.h> using namespace std; int y(int n,int m) { int s=1,i; for(int i=2;i<=n-1;i++) s=(s+m-1)%i+1; return s+1; } int main() { int m,n; while(cin>>n&&n) { for(m=1; ;m++) { if(y(n,m)==2)break; } cout<<m<<endl; } return 0; }