diff --git a/froglike6/README.md b/froglike6/README.md index 481fad0..581e485 100644 --- a/froglike6/README.md +++ b/froglike6/README.md @@ -24,4 +24,5 @@ | 20차시 | 2025.07.09 | 조합론 | [암호 만들기](https://www.acmicpc.net/problem/1759)|https://github.com/AlgoLeadMe/AlgoLeadMe-13/pull/77| | 21차시 | 2025.07.14 | 기하학 | [Cows](https://www.acmicpc.net/problem/6850)|https://github.com/AlgoLeadMe/AlgoLeadMe-13/pull/82| | 22차시 | 2025.07.22 | 그래프 | [밤(Time For The Moon Night)](https://www.acmicpc.net/problem/34064)|https://github.com/AlgoLeadMe/AlgoLeadMe-13/pull/88| + | 23차시 | 2025.07.22 | 정수 | [Fibonacci](https://www.acmicpc.net/problem/7677)|https://github.com/AlgoLeadMe/AlgoLeadMe-13/pull/89| --- diff --git a/froglike6/number_theory/7677.java b/froglike6/number_theory/7677.java new file mode 100644 index 0000000..3ab6c40 --- /dev/null +++ b/froglike6/number_theory/7677.java @@ -0,0 +1,53 @@ +import java.io.*; +import java.util.*; + +public class Main { + private static final int MOD = 10000; + + public static int fibo(long n) { + long m00 = 1, m01 = 1, m10 = 1, m11 = 0; + long v0 = 1, v1 = 0; + + while (n > 0) { + if ((n & 1) == 1) { + long t0 = (m00 * v0 + m01 * v1) % MOD; + long t1 = (m10 * v0 + m11 * v1) % MOD; + v0 = t0; + v1 = t1; + } + long a = (m00 * m00 + m01 * m10) % MOD; + long b = (m00 * m01 + m01 * m11) % MOD; + long c = (m10 * m00 + m11 * m10) % MOD; + long d = (m10 * m01 + m11 * m11) % MOD; + m00 = a; m01 = b; + m10 = c; m11 = d; + + n >>= 1; + } + return (int) v1; + } + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + List inputs = new ArrayList<>(); + String line; + + while ((line = br.readLine()) != null) { + line = line.trim(); + if (!line.isEmpty()) { + inputs.add(Long.parseLong(line)); + } + } + if (!inputs.isEmpty()) { + inputs.remove(inputs.size() - 1); + } + + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + for (long n : inputs) { + bw.write(fibo(n) + "\n"); + } + bw.flush(); + bw.close(); + br.close(); + } +} \ No newline at end of file