피보나치수열을 m으로 나눈 나머지에서 0과 1이 연속으로 나온다면 주기가 나온 것.
#include <iostream>
using namespace std;
int main() {
int tc, n, m;
cin >> tc;
while (tc--) {
cin >> n >> m;
int a = 0;
int b = 1;
int cnt = 0;
while (1) {
if (a == 0 && b == 1 && cnt != 0) {
break;
}
int tmp = a;
a = b;
b = (tmp + a) % m;
cnt++;
}
cout << n << " " << cnt << endl;
}
}
'공식' 카테고리의 다른 글
char >> int형으로 만들어 주기 위해 - '0' 을 한다 (0) | 2020.02.24 |
---|---|
최단거리 알고리즘(다익스트라, 벨만포드, 플로이드워셜) (0) | 2020.02.18 |
행렬 제곱 (0) | 2020.01.28 |
LIS(최장 증가 부분 수열) (0) | 2020.01.27 |
손익분기점 공식 (0) | 2020.01.16 |