Fibonacci Again斐波那契

问题描述
还有另一种斐波那契数:F(0)= 7,F(1)= 11,F(n)= F(n-1)+ F(n-2)(n> = 2)。

输入值
输入由一系列行组成,每行包含一个整数n。(n <1,000,000)。

输出量
如果3被F(n)均分,则打印单词“ yes”。如果没有,则打印单词“ no”。

Sample Input
0
1
2
3
4
5

Sample Output
no
no
yes
no
no
no

求模算法:
时间复杂度log(N) ;
取模法,只有除法不能用。
(a + b) % p = (a % p + b % p) % p ;
(an)%10=(a%10)n%10;
(a-b)%10=(a%10-b%10)%10;
(mn)%10=(m%10n%10)%10;

解题思路: 如果采用递归,套用函数,对于小的数据n可以实现,而当n<1000000时,则太大了;
因此我们需要设置全局变量,用数组来存储。

#include<iostream>
#include<stdio.h>
#include <string.h>
using namespace std;
int a[1000010];
int main()
{
	int n;
	a[0]=7%3;
	a[1]=11%3;
	for(int i=2;i<1000010;i++){
		a[i]=(a[i-1]%3+a[i-2]%3)%3;
	}
	//放在循环外提前计算好,可以省很多时间。
	while(~scanf("%d",&n)){
		if(a[n]==0)
		printf("yes\n");
		else
		printf("no\n");
	}
	
	return 0;
}
发布了26 篇原创文章 · 获赞 0 · 访问量 448

猜你喜欢

转载自blog.csdn.net/weixin_46447561/article/details/105010153