首页 > 代码库 > NEFU115 斐波那契的整除 【整除】

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

题目连接:

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


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