规律就是1的位置,很容易发现1的位置是从1->2->4->8……如果超过数尾则从头偏移,
总之只要经过若干次移动,1再次移动在1的位置,就能够保证洗牌洗回了原序列。
#include"stdio.h"
int main()
{
int n,m,t;
while(scanf("%d",&n)!=-1)
{
m=0;
t=1;
while(1)
{
if(t<=n)t=t*2;
else t=(t*2-1)%(2*n);
m++;
if(t==1)break;
}
printf("%d\n",m);
}
return 0;
}