temp   10달 전

저는 이문제를 사실 풀지 못하였습니다. 

하지만 인터넷상의 다른 소스를 보며 이런방법이구나 하며 정답을 맞았습니다.

그런데 대다수의 정답자분들은 소스가 매우짧길래 참고하고있는데 모두 비슷한 알고리즘이더군요.

근데 저는 이 알고리즘이 도대체 어떻게 나온 건지, 무슨 근거로 이렇게 작성되는지 이해가 되지 않습니다.

제가 첨부한 소스는 다른 분의 소스중 일부를 가져왔습니다. 도대체 왜 m1과 m2로 잡게 되는 것이며, 그 밑의 연산과정은 어떻게 구성이 되는건가요? 

혹시 이문제와 관련된 다른 알고리즘이 있나요? 

mendou12   10달 전

문제를 풀어보지는 않았는데

(a + b) mod c = (a mod c + b mod c) mod c

이걸 응용해서 한 것 같아용 헤헤

m1 ,m2는 피보나치의 n항과 n+1항을 m으로 나눈 나머지이고, 이게  피보나치의 0항과 1항을 m으로 나눈 나머지와 같아질 때까지 연산을 반복하는 거네용.

temp   10달 전

실례가안된다면

while (m1 != 1 || m2 != 1); 이부분 설명을 다시 해주실수있나요? 그리고 왜 이 반복문이 주기가 되는거죠?ㅜㅜ

cubelover   10달 전

피보나치 수열은 바로 이전 두 항에 의해 다음 항이 결정되는 수열입니다. m이 11일 때를 보면 다음처럼 진행됩니다.

1 -> 1 -> 2 -> 3 -> 5 -> 8 -> 2 -> 10 -> 1 -> 0 -> 1 -> 1 -> 2 -> 3 -> 5 -> ...

따라서 1이 처음으로 두 번 나오는 때가 주기가 됨을 알 수 있고, 이것을 while(m1 != 1 || m2 != 1) 로 확인하는 것입니다.

댓글을 작성하려면 로그인해야 합니다.