牛客網——題目A:廣義肥波
阿新 • • 發佈:2021-01-05
技術標籤:牛客網
連結: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;
}