1005 Number Sequence(廣義斐波那契數列)
Problem Description
A number sequence is defined as follows:
f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.
Given A, B, and n, you are to calculate the value of f(n).
Input
The input consists of multiple test cases. Each test case contains 3 integers A, B and n on a single line (1 <= A, B <= 1000, 1 <= n <= 100,000,000). Three zeros signal the end of input and this test case is not to be processed.
Output
For each test case, print the value of f(n) on a single line.
Sample Input
1 1 3
1 2 10
0 0 0
Sample Output
2
5
網上的題解都是找規律,那如果mod再大一點就不行了,所以我用快速矩陣冪做的,適用於廣義斐波那契數列
#include<bits/stdc++.h>
using namespace std;
const int mod=7;
using LL=int64_t;
struct Node {
LL m[3][3];
}sum,base ;
Node muilt(Node a,Node b) {
Node temp;
for(int i=0;i<2;i++) {
for(int j=0;j<2;j++) {
temp.m[i][j]=0;
for(int k=0;k<2;k++)
temp.m[i][j]=(a.m[i][k]*b.m[k][j]+temp.m[i][j])%mod;
}
}
return temp;
}
LL q_mod(LL a,LL b,LL n) {
sum.m[0 ][0]=sum.m[1][0]=1;
sum.m[0][1]=sum.m[1][1]=0;
base.m[0][0]=a%mod;
base.m[0][1]=b%mod;
base.m[1][0]=1,base.m[1][1]=0;
n-=2;
while(n) {
if(n&1) sum=muilt(base,sum);
n>>=1;
base=muilt(base,base);
}
return sum.m[0][0];
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
LL a,b,n;
while(cin>>a>>b>>n&&a&&b&&n) {
if(n<=2) {
if(n==1) cout<<a<<endl;
else if(n==2) cout<<b<<endl;
}
else cout<<q_mod(a,b,n)<<endl;
}
return 0;
}
相關推薦
1005 Number Sequence(廣義斐波那契數列)
Problem Description A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. G
【杭電-oj】-1865-1sting(大數斐波那契數列)
1sting Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 5021 Accepted Submiss
Java 兔子問題(斐波那契數列)擴展篇
aik 第一個 truct func main target htm bre trace Java 兔子問題(斐波那契數列)擴展篇 斐波那契數列指的是這樣一個數列 0, 1, 1, 2,3, 5, 8, 13, 21, 34, 55, 89, 144, ...對於這個
[洛谷P1349]廣義斐波那契數列
矩陣加速 解題思路 string 簡單 set c++ mat 題目 n-1 題目大意:設$f[n]=f[n-1]*p+f[n-2]*q(當n>2時)$,給你p,q,f[1],f[2],n,m,求f[n]mod m的值。 解題思路:明顯,遞推是會TLE的,我們又得用
洛谷——P1349 廣義斐波那契數列
分享 for iostream amp size alt 以及 hide pre 題目描述 廣義的斐波那契數列是指形如an=p*an-1+q*an-2的數列。今給定數列的兩系數p和q,以及數列的最前兩項a1和a2,另給出兩個整數n和m,試求數列的第n項an除以m的余數。
找一找(斐波那契數列)
數列 || amp question 滿足 mil 一個 輸出 family 題目要求:給定n個正整數,請找出其中有多少個數x滿足:在這n個數中存在數y,使y=kx,其中k為大於1的整數 輸入描述 : 第一行輸入一個n,接下來一行輸入n個正整數ai 輸出描述:輸出符合條件個
P1349 廣義斐波那契數列
ans oid 範圍 span ive 基本 article space while 題目描述 廣義的斐波那契數列是指形如an=p*an-1+q*an-2的數列。今給定數列的兩系數p和q,以及數列的最前兩項a1和a2,另給出兩個整數n和m,試求數列的第n項an除以m的
[Luogu] 廣義斐波那契數列
數列 problem 題解 get .org www. org com targe https://www.luogu.org/problemnew/show/P1349 題解:https://www.zybuluo.com/wsndy-xx/note/1152988[L
【CF446C】DZY Loves Fibonacci Numbers (線段樹 + 斐波那契數列)
nac ++ return isp mat span 先來 sum scrip Description ? 看題戳我 給你一個序列,要求支持區間加斐波那契數列和區間求和。\(~n \leq 3 \times 10 ^ 5, ~fib_1 = fib_2 = 1~\). So
[洛谷P1349] 廣義斐波那契數列
tdi 裸題 == pre lin () long pan targe 復習矩陣乘法。 題目傳送門 裸題、水題。 a[n] a[n-1] * p 1 = a[n+1] a[n]
Java中的不死神兔(斐波那契數列)
三種方法實現例項: package test17_digui; import java.util.Scanner; /* * 題目:有一對兔子,從出生後第3個月起每個月都生1對兔子,小兔子第三個月後也可以生一對兔子, * 假如兔子不死,在指定月份時刻一共可以有多少對兔子 *
java:遞迴練習(斐波那契數列)
package com.heima.test; public class Test5 { public static void main(String[] args) { demo1(); System.out.println(fun(8)); } //使用陣列求斐波那契數列
【矩陣乘法x2】LuoGu P1349 廣義斐波那契數列&&LNSYOJ#395遞推式字首和
這是兩道矩陣的水題 題目描述 數列f[n]=f[n-1]+f[n-2]+n+1,f[1]=f[2]=1的前n項和s[n]=f[1]+f[2]+……+f[n]的快速求法(答案取模10e9+7) 輸入格式 一個整數bb。 輸出格式 一個整數字首和。
兔子的繁殖問題(斐波那契數列)
Problem A: 兔子的繁殖問題 假設一對兔子每月能生一對小兔(一雌一雄),每對小兔出生後的下一個月是沒有繁殖能力的,至出生後的第三個月開始又可以每月生一對小兔,問從一對剛出生的小兔開始,經過若干個月後一共有多少兔子(假設在此過程中兔子沒有死亡)? 這個問題
codeforces316E3 Summer Homework(線段樹,斐波那契數列)
pan hang 題目 using queue main scanf spa 維護 題目大意 給定一個n個數的數列,m個操作,有三種操作: \(1\ x\ v\) 將\(a_x\)的值修改成v \(2\ l\ r\\) 求 \(\sum_{i=l}^r x_i*f_{i-
矩陣快速冪(以斐波那契數列為例)
小 M 玩數列 【問題描述】 小 W 發現了一個神奇的數列: () = ( − 1) + ( − 2) { ≥ 3, (1) = 1, (2) = 1} ,這就是著名的 Fibonacci Se
再刷PAT系列~ 1008 童年生活二三事(斐波那契數列)
題目描述 NowCoder小時候走路喜歡蹦蹦跳跳,他最喜歡在樓梯上跳來跳去。 但年幼的他一次只能走上一階或者一下子蹦上兩階。 現在一共有N階臺階,請你計算一下NowCoder從第0階到第N階共有幾
極值問題-(斐波那契數列)
已知m、n為整數,且滿足下列兩個條件: ① m、n∈{1,2,…,k},即1≤m,n≤k ②(n2-m*n-m2)2=1 你的任務是:程式設計輸入正整數k(1≤k≤109),求一組滿足上述兩個條件的m、n,並且使m2+n2的值最大。例如,從鍵盤輸入k=199
不死兔(斐波那契數列)
public static void main(String[] args) { /** * 需求:有一對兔子,從出生後第3個月起每個月都生一對兔子, * 小兔子長到第三個月後每個月又生一對兔子, * 假如兔子都不死,問第二十個月的兔子對數為多少? *
fibonacii數列(斐波那契數列)的遞迴實現及迴圈實現
public class Fibonacii { public static long fibo(int num){ //遞迴方法 if(num==1||num==2) //定義出口 return 1; return fibo(num-1)+fibo(