题目背景
大家都知道,斐波那契数列是满足如下性质的一个数列:
f(1) = 1 f(1)=1
f(2) = 1f(2)=1
f(n) = f(n-1) + f(n-2)f(n)=f(n−1)+f(n−2) (n ≥ 2n≥2 且 nn 为整数)。
题目描述
请你求出第n个斐波那契数列的数mod(或%)2^31 之后的值。并把它分解质因数。
输入输出格式
输入格式:
n
输出格式:
把第nn个斐波那契数列的数分解质因数。
输入输出样例
输入样例#1:
5
输出样例#1:
5=5
输入样例#2:
6
输出样例#2:
8=2*2*2
说明
n<=48
这道题是1997NOIP普及组的第*题,比较简单,蒟蒻的作者10分钟就想出来了。
思路:
递归求出斐波那契数列,放进数组,方便等会儿用,然后再分解质因数+输出就行了。
简单地说,就是分解质因数代码加上斐波那契数列的代码。
源代码
#include<bits/stdc++.h>
using namespace std;
long long n,dp[49],x=1;
long long p=pow(2,31);//按照题意,等会儿%这个数
int main(){
cin>>n;
dp[1]=1;
dp[2]=1;//斐波那契数列初始化
for(int i=3;i<=n;i++){
dp[i]=(dp[i-1]+dp[i-2])%p;//构造斐波那契数列
}
cout<<dp[n]<<"=";//输出
for(int i=2;i<=dp[n];i++){
for(int j=0;dp[n]%i==0;j++){
if(x){
x=0;
cout<<i;
}
else {
cout<<'*'<<i;
}
dp[n]/=i;//分解质因数+输出
}
}
cout<<endl;
}