1. 程式人生 > 其它 >牛客網——題目A:廣義肥波

牛客網——題目A:廣義肥波

技術標籤:牛客網

連結:https://ac.nowcoder.com/acm/contest/10507/A
來源:牛客網

題目描述

廣義肥波那契數列,以遞迴的方法定義如下:

例如,當a=b=\text 1a=b=1時,數列為[\text 1,1,2,3,5,8,13,…][1,1,2,3,5,8,13,…]。
現在,請求出。

輸入描述:

輸入共一行,包含4個正整數a,b,m,n(1<= a,b,m<=10^9,1<= n <=10^5)。

輸出描述:

輸出共一行,包含一個非負整數表示答案。由於結果可能較大,你只需要輸出答案對10^9+7=1,000,000,007取模的結果。
示例1

輸入

1 1 2 4

輸出

8

說明

在這裡插入圖片描述

正確程式碼:

#include<iostream>
#include<stdio.h>
#include<cmath>
using namespace std;
long long dp[100100];
long long MOD=1000000007;
long long suan(long long a,long long n){
    long long re = 1;
    while(n)
    {
        if(n & 1)//判斷n的最後一位是否為1
            re = (re * a) % MOD;
        n >>=
1;//捨去n的最後一位 a = (a * a) % MOD;//將a平方 } return re; } int main(){ int a,b,m,n; while(cin>>a>>b>>m>>n){ long long dp[n+5]; dp[2]=1; dp[1]=1; for(int i=3;i<=n;i++){ dp[i]=(a*dp[i-1]%(MOD-1)+b*dp[i-2]%(MOD-1))%(MOD-
1); } long long k=suan(m,dp[n]); cout<<k<<endl; } return 0; }