[Easy] DivideAndShift
Topcoder SRM 508 Div1
귀찮으니까 M을 0-index 로 만들고 시작하자
길이 N의 수열을 p개로 나누면 새로운 수열에서 M은 M % y 로 변한다 (y = N / p)
오른쪽으로 shift 하고 divide 함 : (M + 1) % y
divide 하고 오른쪽으로 shift 함 : (M % y + 1) % y
이 둘은 같다. 왼쪽 shift도 마찬가지. 따라서 연산을 뭘 먼저 하든 상관없다.
divide를 먼저 다 하고 그 다음에 shift를 몰아서 하는 전략을 취하자.
문제에서는 항상 prime p 를 고른 후 p개로 나눌 수 있다고 했지만
생각해보면 이 prime들을 조합하여 divide를 반복해서 수열을 원하는 길이로 만들 수 있다.
대신 그 길이는 N의 약수가 되어야 한다.
그래서 N의 약수를 돌면서 수열의 최종 길이 y를 정하고, M이 0이 되도록 왼쪽 혹은 오른쪽으로 shift해주면 된다.