P2626 斐波那契数列(升级版)

题目背景

大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数)。

题目描述

请你求出第n个斐波那契数列的数mod(或%)2^31之后的值。并把它分解质因数。

输入输出格式

输入格式:

 

n

 

输出格式:

 

把第n个斐波那契数列的数分解质因数。

 

输入输出样例

输入样例#1: 复制
5
输出样例#1: 复制
5=5
输入样例#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人格分裂,,是我人格分裂。


我好想你,好想我妈,我妈真的很好很好很好,她是世界上最好的人。
希望你们一切都好。

告诉我吧,别再沉默如迷。


如果你不开心,那我就把右边这个帅傻子分享给你吧, 


你看,他这么好看,那么深情的望着你,你还伤心吗? 


真的!这照片盯上他五秒钟就想笑了。 


一切都会过去的。

 
posted @ 2018-04-11 22:25  孟东行#  阅读(421)  评论(0编辑  收藏  举报