NEFU115 斐波那契的整除 【整除】

来源:互联网 发布:sqlite json 编辑:程序博客网 时间:2024/05/11 15:43

题目连接:

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;}


0 0