nefu115 斐波那契的整除(数论,整除推导)

来源:互联网 发布:ps软件文字编辑 编辑:程序博客网 时间:2024/05/21 05:23

Description

已知斐波那契数列有如下递归定义,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和4整除,你知道吗?

Input

输入数据有若干组,每组数据包含一个整数n(1< n <1000000000)。

Output

对应每组数据n,若 f(n)能被3整除,则输出“3”; 若f(n)
能被4整除,则输出“4”;如果能被12整除,输出“YES”;否则输出“NO”。

Sample Input

46712

Sample Output

34NOYES

思路

我们假设3|f(k),所以

f(k+4)=f(k+3)+f(k+2)=f(k+1)+f(k+2)+f(k+1)+f(k)=f(k+1)+f(k)+f(k+1)+f(k+1)+f(k)=3f(k+1)+2f(k)

因为 3|f(k)
所以 3|2f(k)
又因为 3|3f(k+1)
所以 3|(3f(k+1)+2f(k))
所以 3|f(k+4)
同理可证4|f(k+6),12|f(k+12)

代码

#include <cstdio>#include <cstring>#include <cctype>#include <string>#include <set>#include <iostream>#include <stack>#include <cmath>#include <queue>#include <vector>#include <algorithm>#define mem(a,b) memset(a,b,sizeof(a))#define inf 0x3f3f3f3f#define mod 1000007#define ll long longusing namespace std;const int N=1e7+5;int main(){    int n;    while(~scanf("%d",&n))    {        if(n%12==0)            puts("YES");        else if(n%4==0)            puts("3");        else if(n%6==0)            puts("4");        else            puts("NO");    }    return 0;}
原创粉丝点击