๋ฌธ์
์ฒซ์งธ ์ค์ n์ด ์ฃผ์ด์ง๋ค. n์ 1,000,000,000,000,000,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค.
์ ๋ ฅ 1
1000
์ถ๋ ฅ 1
228875
์ฝ๋
#include<iostream>
#include<cmath>
using namespace std;
//2749๋ฒ ํผ๋ณด๋์น ์ 3
//ํผ์ฌ๋
ธ ์ฃผ๊ธฐ๋ฅผ ์ด์ฉ
long long arr[1500050]; //๋ฉ๋ชจ์ด์ ์ด์
int m = 1000000; //๋๋๋ ์
int cycle;
int cycle_func() {
int k=0,tmp=m;
while (tmp > 1) {
tmp /= 10;
k++;
}
return 15 * pow(10, k - 1);
}
void pisano_fibo() {
arr[0] = 0;
arr[1] = 1;
//ํ์ฌ๋
ธ ์ฃผ๊ธฐ์ ์ํ์ฌ 1500000์ ๊ฐ๋ค์ด ๋ฐ๋ณต๋ ํ์ ๋ค์ ์ฌ ๋ฐ๋ณต๋จ
cycle = cycle_func();
for (int i = 0; i < cycle; i++) {
arr[i + 2] = (arr[i+1]+arr[i])%m;
}
}
int main() {
cin.tie(NULL);cout.tie(NULL);
ios::sync_with_stdio(false);
long long n;
cin >> n;
pisano_fibo();
cout << arr[n % cycle];
return 0;
}
*๊ฐ๋จํ ํด์ค*
ํผ์ฌ๋ ธ ์ฃผ๊ธฐ๋ฅผ ์ด์ฉํ์ฌ ํธ๋ ๋ฌธ์ ์ด๋ค ๊ธฐ๋ณธ์ ์ผ๋ก n์ ๋ฒ์๊ฐ 1,000,000,000,000,000,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์ ์ด๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด์ ์ฐ๋ ์ฌ๊ทํจ์๋ฅผ ์ด์ฉํ์ฌ์ ํธ๋ ๋ฐฉ๋ฒ์ ์๊ฐ์ด ๋งค์ฐ ์ค๋ ๊ฑธ๋ฆฌ๋ฏ๋ก ์ธ์๊ฐ ์๋ค. ๋ฐ๋ผ์ ํผ์ฌ๋ ธ ์ฃผ๊ธฐ๋ฅผ ํตํด ๋ฐ๋ณต ์ฃผ๊ธฐ๋ฅผ ์ฐพ๊ณ ๊ทธ ์ฃผ๊ธฐ๋์์ ํผ๋ณด๋์น ์์ด์์ m์ผ๋ก ๋๋ ๋๋จธ์ง ๊ฐ๋ค์ ๋ฐฐ์ด์ ์ ์ฅํ๋ค. ๊ทธ ํ ์ ์ฅํ ๋ฐฐ์ด์์ ์ฐพ๊ณ ์ ํ๋ n๋ฒ์งธ๊ฐ ์ฃผ๊ธฐ์์ ๋ช๋ฒ์งธ ์ซ์์ธ์ง ์ฐพ์๋ด์ ํด๋น ๋ฐฐ์ด์ ๊ฐ์ ์ถ๋ ฅํ๋ฉด ๋๋ค. ํผ์ฌ๋ ธ ์ฃผ๊ธฐ๋
๋๋๋ ๊ฐ์ M์ด๋ผ๊ณ ์ง์นญํ์ ๋,
M=10^k , cycle = 15 x 10^(k-1)
์ด๋ค.
*์ด ๋ฐฉ๋ฒ๋ง์ด ๋ง๋ ์ ๋ต์ ์๋๋๋ค.
ํจ์ฌ ์ข๊ณ ๋น ๋ฅธ ๋ค๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ ์ ์์ต๋๋ค.
์๊ณ ๋ฆฌ์ฆ ๊ณต๋ถํ์๋ ๋ถ๋ค ํ์ดํ ! '0'/*
'์๊ณ ๋ฆฌ์ฆ > BaekJoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++] BOJ 2178๋ฒ: ๋ฏธ๋ก ํ์ (0) | 2022.07.05 |
---|---|
[C++] BOJ 6087๋ฒ: ๋ ์ด์ ํต์ (0) | 2022.06.28 |
[C++] BOJ 2244๋ฒ: ๋ฏผ์ฝ์ฐ์คํค ํฉ (0) | 2022.06.13 |
[C++] BOJ 2933๋ฒ: ๋ฏธ๋ค๋ (0) | 2022.06.13 |
[C++] BOJ 1655๋ฒ: ๊ฐ์ด๋ฐ๋ฅผ ๋งํด์ (0) | 2022.06.08 |