P2626 斐波那契數列(升級版)
阿新 • • 發佈:2018-04-12
sam sin use important turn 質數 spa pre stream
題目背景
大家都知道,斐波那契數列是滿足如下性質的一個數列: ? 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 longxx(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人格分裂,,是我人格分裂。
我好想你,好想我媽,我媽真的很好很好很好,她是世界上最好的人。
希望你們一切都好。
告訴我吧,別再沈默如迷。
P2626 斐波那契數列(升級版)