Algorithm/📖Baekjoon

#9471 피사노 주기

yewoneeee 2022. 4. 8. 20:51

# 문제

# 풀이

원래 2749번을 먼저 풀고 있었는데 도저히 모르겠어서 구글링해보니 이 문제를 먼저 풀고 2749번 푸는것을 추천하더라

그래서 이문제부터 풀어봤다

 

이것도 뭔소린지 모르겠어서 구글링했다ㅋㅋㅋ

http://melonicedlatte.com/algorithm/2018/08/28/022247.html

 

[백준] 9471번 C/C++ 풀이 _ 피사노 주기 - Easy is Perfect

시간 제한메모리 제한제출정답맞은 사람정답 비율1 초128 MB28321518681.938% 문제1960년, IBM의 직원 Donald Wall은 피보나치 수열을 m으로 나눈 나머지가 주기를 이룬다는 것을 증명했다.예를 들어, 피보

melonicedlatte.com

위 블로그를 보고 이해했음

 

#include <iostream>
#include <vector>
using namespace std;

int main() {
	int T;
	cin >> T;
	for (int i = 0; i < T; i++) {
		int num, m;
		cin >> num >> m;
		vector<int> fibo;
		fibo.push_back(0);
		fibo.push_back(1);
		fibo.push_back(1); // 두 번째 피보나치수열까진 그냥 삽입

		int n = 3; // 세 번째 피보나치수열부턴 앞의 두 수를 덧셈하는 방식
		while (true) {
			// 나머지가 0, 1이 연속으로 나올 때 까지 계산
			fibo.push_back((fibo.at(n - 1) + fibo.at(n - 2)) % m);
			if (fibo.at(n - 1) % m == 0 && fibo.at(n) % m == 1)
				break;
			n++;
		}
		cout << num << " " << n - 1 << "\n";
	}
}