有n个元素,右移k位,一种数组循环右移的方法是:1 2 3 4 5 6 ,移2位,将1移到3,3移到5,5移到1,结束。移2到4,4到6,6到2,结束。 一共2组,2正好就是2 ,6 的最大公约数。
即每个元素m移到(m+k) % n的位置上,而(m+k)%n移到(m+2k)%n的位置上……
当n与k互质时,可以证明m, m+k, m+2k, ..., m + (n-1)k模n的结果互不相等,刚好构成一个循环;否则,会构成(n,k)(n与k的最大公约数)个循环。分别处理这(n,k)个循环就可以得到结果。
这个公约数怎么来的啊,为什么正好是(n k) 最大公约数个循环呀。。?怎么想到的?