P2626 斐波那契数列(升级版)
题目背景
大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数)。
题目描述
请你求出第n个斐波那契数列的数mod(或%)2^31之后的值。并把它分解质因数。
输入输出格式
输入格式:
n
输出格式:
把第n个斐波那契数列的数分解质因数。
输入输出样例
输入样例#2: 复制
6
输出样例#2: 复制
8=2*2*2
说明
n<=48
嗯,这道题没有那么那么那么的数学化了。
看题目,那就分成三块:
1、斐波那契求第n个数;
2、这个数%2^31(useless);
3、将这个数分解成几个质数的乘积(the most important I think)。
第三步我用的dfs。
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<algorithm> 5 using namespace std; 6 int n; 7 bool b; 8 long long f[52]; 9 long long xx(int x,int y) //为了求2^31,但实际好像没什么用。 10 { 11 long long a=1; 12 for(int i=1;i<=y;++i) 13 a*=x; 14 return a; 15 } 16 void dfs(int x,int y) //分解x,y为x的除1以外的最小的质因数。 17 { 18 if(x<y) return ; 19 for(int i=y;i<=x;++i) 20 if(!(x%i)) //如果能整除 21 { 22 if(b) printf("*"); 23 else b=1; 24 printf("%d",i); //输出这个因数 25 dfs(x/i,i); //因为是分解成因数的乘积,已经输出一个因数了, 26 //所以以后要分解的数就变成了x/i; 27 return ; 28 } 29 } 30 int main() 31 { 32 scanf("%d",&n); 33 f[1]=1; 34 f[2]=1; 35 for(int i=3;i<=n;++i) //斐波那契 36 f[i]=f[i-1]+f[i-2]; 37 f[n]=f[n]%xx(2,31); 38 printf("%d=",f[n]); 39 dfs(f[n],2); //1不是质数,从2开始筛 40 return 0; 41 }
另:
我感觉不是lxl人格分裂,,是我人格分裂。
我好想你,好想我妈,我妈真的很好很好很好,她是世界上最好的人。
希望你们一切都好。
告诉我吧,别再沉默如迷。
如果你不开心,那我就把右边这个帅傻子分享给你吧,
你看,他这么好看,那么深情的望着你,你还伤心吗?
真的!这照片盯上他五秒钟就想笑了。
一切都会过去的。