반응형
문제 출처 :
https://www.acmicpc.net/problem/2749
알고리즘 분석 :
문제 해결에 필요한 사항
1. 피사노 주기(Pisano Period) :: https://www.google.co.kr/search?q=%ED%94%BC%EC%82%AC%EB%85%B8+%EC%A3%BC%EA%B8%B0(Pisano+Period)&oq=%ED%94%BC%EC%82%AC%EB%85%B8+%EC%A3%BC%EA%B8%B0(Pisano+Period)&aqs=chrome..69i57j69i60.143j0j4&sourceid=chrome&ie=UTF-8
피사노 주기라는 개념을 이용하여 풀면 된다.
나머지를 이용해서 만든 수열은 주기가 나타날 수 있다. k(m)을 반복하는 부분 수열의 길이라고 했을 때, k(11) = 10임을 알 수 있다.
몇가지 성질들은 아래와 같다.
소스 코드 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(String[] args) { BigInteger a = new BigInteger("1"); BigInteger b = new BigInteger("1"); BigInteger c = new BigInteger("2"); Scanner sc = new Scanner(System.in); long n; n = sc.nextLong(); if(n == 0) System.out.println(0); else if(n == 1) System.out.println(1); else if(n == 2) System.out.println(1); else { for(long i = 3; i <= n % 1500000; i ++) { c = (b.add(a)).mod(BigInteger.valueOf(1000000)); c = c.mod(BigInteger.valueOf(1000000)); a = b.mod(BigInteger.valueOf(1000000)); b = c.mod(BigInteger.valueOf(1000000)); } System.out.println(c.mod(BigInteger.valueOf(1000000))); } } } // This source code Copyright belongs to Crocus // If you want to see more? click here >> | Crocus |
반응형
'Applied > 알고리즘 문제풀이' 카테고리의 다른 글
[9525번] 룩 배치하기 (0) | 2017.04.15 |
---|---|
[11444번] 피보나치 수 6 (0) | 2017.04.15 |
[10826번] 피보나치 수 4 (0) | 2017.04.15 |
[9177번] 단어 섞기 (0) | 2017.04.15 |
[1850번] 최대공약수 (0) | 2017.04.14 |