标签:
题目连接:
http://acm.nefu.edu.cn/JudgeOnline/problemshow.php?problem_id=115
题目大意:
斐波那契数列有如下递归定义,f(1)=1,f(2)=1, 且n>=3,f(n)=f(n-1)+f(n-2),它的前几项可以表示为
1, 1,2 ,3 ,5 ,8,13,21,34…,问题是:若 f(n)能被3整除,则输出“3”; 若f(n) 能被4整
除,则输出“4”;如果能被12整除,输出“YES”;否则输出“NO”。
思路:
若f(n)能被12整除,则f(n)肯定能被3和4整除,这时候输出"YES",如果f(n)不能被12整除了,再判断
f(n)能被3整除,还是被4整除。都不满足了,再输出"NO"。但是,数据规模是1000000000,数据量
较大,直接计算会溢出,所以考虑是否存在循环节。得出:当且仅当n能被4整除,f(n)能被3整除。当
且仅当n可以被6整除,f(n)能被4整除。由此可得:当且仅当n可以被12整除(4、6的最小公倍数),f(n)
能被12整除。
AC代码:
#include<iostream> #include<algorithm> using namespace std; int main() { int N; while(cin >> N) { if(N % 12 == 0) cout << "YES" << endl; else { if(N % 4 == 0) cout << "3" << endl; else { if(N % 6 == 0) cout << "4" << endl; else cout << "NO" << endl; } } } return 0; }
标签:
原文地址:http://blog.csdn.net/lianai911/article/details/43413641