문제
백준 4354
방법 1
설명
KMP 의 Failure Function 의 응용으로 풀 수 있다.
시간 복잡도
O(\(\mathrm{N}\))
코드
방법 2
설명
s = a^k
꼴이라고 한다면 k
는 len(s)
의 약수가 된다. 여기서 모든 약수의 경우에서 수행한다면 시간초과가 난다. 하지만 어떤 k1
, k2
가 s = a^k
를 성립시킨다면 LCM(k1, k2)
역시 마찬가지라는 성질을 이용하면 최적화할 수 있다.
len(s)
를 소인수분해 하여 소수마다 테스트를 시행하고, 테스트에 성공했다면 그의 거듭제곱에 대해서도 테스트를 수행한다. 그리고 테스트에 통과한 소수의 거듭제곱들을 곱해주면 답이 된다.
시간 복잡도
O(\(\mathrm{N}\log{\mathrm{N}}\))
코드
댓글남기기