์ƒˆ์†Œ์‹

์•Œ๊ณ ๋ฆฌ์ฆ˜/BaekJoon

[C++] BOJ 2749๋ฒˆ: ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜ 3

  • -
728x90

 

๋ฌธ์ œ

์ฒซ์งธ ์ค„์— 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'/*

๋ฐ˜์‘ํ˜•
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.