1. 程式人生 > >題解 P2626 【斐波那契數列(升級版)】

題解 P2626 【斐波那契數列(升級版)】

實現 ace 升級版 因數 退出 turn 思路 font return

題解 P2626 【斐波那契數列(升級版)】

這一道題目的解法多種多樣,但就對於題目本身而言拿暴力分應該不是太難,簡單地模擬一下斐波拉契的過程,求出第n個,最後分解質因數也不難暴力出奇跡。對於代碼的實現我只花了幾分鐘,一次就AC ^_^

#include<bits/stdc++.h> 
#define max 2147483648 //2^31次方的值,拿計算器算的
using namespace std;  
int main()  
{  
    int n;
    cin>>n;
    if(n==1||n==2){//對於前兩個1,1時可以直接輸出
        cout<<1;
        return 0; //結束
    }
    int a=1,b=1,c;
    for(int i=1;i<=n-2;i++)//斐波拉契數列的模擬
    {
        c=a+b;//第三項
        a=b;//每一個往前移動
        b=c;
    }
    cout<<c%max<<"=";//輸出第n個%2^31
    int x=c%max;//將c%max存入x
    for(int i=2;i<=x;i++)//每次都暴力枚舉2~n
    {
        if(c%i==0){
            cout<<i;
            c=c/i;//更新c的值,對c進行分解
            i=1;//這裏之所以會寫i=1是因為在循環結束後會i++,所以就相當與從i=2~n了
            if(c==1)break;//當分解完畢後即可退出
            else cout<<"*";//如果不是最後一個還要輸出"*"
        }
    }
}  

  

這題的兩個難點就是1.求斐波那契數列第n,2.對n%2^31分解質因數。註意:2^31最好用long long來存,對於數據範圍來看,這個範圍實在是太小了,隨隨便便的暴力就可以過了,這裏只是提供一個簡單的思路,方便大家對這道題有更好的理解。理解萬歲!

題解 P2626 【斐波那契數列(升級版)】