#include<stdio.h>
void RightShift1(int *arr,int N,int K)
{//循环右移
K %= N;
while(K--)
{
int t = arr[N - 1];
for(int i = N - 1; i > 0;--i)
{
arr[i] = arr[i - 1];
}
arr[0] = t;
}
}
void Reverse(int *arr,int b,int e)
{
for( ; b < e; b++,e--)
{
int temp = arr[e];
arr[e] = arr[b];
arr[b] = temp;
}
}
void RightShift2(int *arr,int N,int K)
{
K %= N;
Reverse(arr,0,N - K -1);
Reverse(arr,N - K,N-1);
Reverse(arr,0,N-1);
}
int gcd(int a,int b)
{
if( b == 0 )
return a;
else
return gcd(b,a%b);
}
void RightShift3(int *arr,int N, int K)
{//循环右移
int i,j;
int num = gcd(K,N);
for( i = 0 ;i < num;++i)
{
int tmp = arr[i];
j = i;
while(1)
{
int m = (j + N-K) % N;
if(m == i)
break;
arr[j] = arr[m];
j = m;
}
arr[j] = tmp;
}
}