首页 > 其他分享 >904 斐波那契数列3

904 斐波那契数列3

时间:2025-01-16 10:21:09浏览次数:1  
标签:数列 904 int long 斐波 那契

// 904 斐波那契数列3.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

/*
http://oj.daimayuan.top/course/22/problem/1083

题目描述
斐波那契数列指的是以下数列: 1,1,2,3,5,8,...
,从第三个数开始,每个数是前两个数的和。

请问这个数列的前 n
 项的和模 109+7
 是多少。

输入格式
第一行一个整数 n
。

输出格式
一行一个数表示答案。

样例输入
5
样例输出
12
数据范围
对于 100% 的数据,保证 1≤n≤109。

*/
#include <iostream>
#include <cstring>

using namespace std;

const int N = 3, n = 3, MOD = 1000000007;
long long  f[N + 1];
long long a[N + 1][N + 1];
int k;

void fa() {
	long long w[N + 1];
	memset(w, 0, sizeof w);
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			w[i] += f[j] * a[i][j];
			w[i] %= MOD;
		}
	}
	memcpy(f, w, sizeof w);
}

void aa() {
	long long w[N + 1][N + 1];
	memset(w, 0, sizeof w);
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			for (int k = 1; k <= n; k++) {
				w[i][j] += a[i][k] * a[k][j];
				w[i][j] %= MOD;
			}
		}
	}

	memcpy(a, w, sizeof w);
}

void matrixpow(int k) {
	while (k) {
		if (k & 1)
			fa();
		aa();
		k >>= 1;
	}
}

int main()
{
	cin >> k;
	f[1] = 0; f[2] = 1; f[3] = 0;
	a[1][1] = 0; a[1][2] = 1; a[1][3] = 0;
	a[2][1] = 1; a[2][2] = 1; a[2][3] = 0;
	a[3][1] = 0; a[3][2] = 1; a[3][3] = 1;

	matrixpow(k);

	cout << f[3] << endl;
}

标签:数列,904,int,long,斐波,那契
From: https://www.cnblogs.com/itdef/p/18674419

相关文章

  • 903 斐波那契数列2
    //903斐波那契数列2.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。///*http://oj.daimayuan.top/course/22/problem/1045斐波那契数列指的是以下数列:1,1,2,3,5,8,...,从第三个数开始,每个数是前两个数的和。请问这个数列的第n项模109+7是多少。输入格......
  • 关于CVE-2024-9047的分析
    1漏洞成因  本文的分析基于wp-file-upload.4.24.11。在wfu_file_downloader.php中存在可控变量$filepath,能够读取文件。漏洞代码如下所示:if($fd=wfu_fopen_for_downloader($filepath,"rb")){ $open_session=(($wfu_user_state_handler=="session"||$wfu_us......
  • 偶斐波那契数列性质与欧拉计划第2题 Properties of Fibonacci numbers and Project Eu
    Problem2EvenFibonaccinumbersEachnewtermintheFibonaccisequenceisgeneratedbyaddingtheprevioustwoterms.Bystartingwith1and2,thefirst10termswillbe:1,2,3,5,8,13,21,34,55,89,…ByconsideringthetermsintheFibonacci......
  • 算法-泰波那契
    力扣题目链接:1137.第N个泰波那契数-力扣(LeetCode)泰波那契序列 Tn 定义如下: T0 =0,T1 =1,T2 =1,且在n>=0 的条件下Tn+3 =Tn +Tn+1 +Tn+2给你整数 n,请返回第n个泰波那契数 Tn 的值。示例1:输入:n=4输出:4解释:T_3=0+1+1=2T_4......
  • 计算机毕设项目o904d6p1+springboot基于微信小程序的城市公交查询系统,计算机毕业生可
    springboot基于微信小程序的城市公交查询系统摘   要当今社会已经步入了科学技术进步和经济社会快速发展的新时期,国际信息和学术交流也不断加强,计算机技术对经济社会发展和人民生活改善的影响也日益突出,人类的生存和思考方式也产生了变化。传统城市公交查询管理采取了人......
  • 斐波那契与公约数
    斐波那契与公约数设斐波那契数列第\(i\)项为\(f_i\)。\[f_i=\begin{cases}1&(i\leq2)\\f_{i-1}+f_{i-2}&(i>2)\end{cases}\]Lemma1\[\gcd(f_i,f_{i+1})=1\]Proof1数学归纳法。当\(i=1\)时,\(\gcd(f_1,f_2)=\gcd(1,1)=1\)。设\(f_k=a,f_{k+1}=b\),则有\......
  • P9041 [PA2021] Fiolki 2
    P9041[PA2021]Fiolki2题意给一个\(n\)个点\(m\)条边的DAG和一个常数\(k\)。定义\(f(l,r)\)表示最多选择不相交路径条数,满足起点\(s\in[1,k]\),终点\(t\in[l,r]\)。对所有的\(x\in[0,k]\),求出有多少\([l,r]\subseteq(k,n]\)使得\(f(l,r)=x\)。\(n\le10^5,m......
  • 数据结构复习 (顺序查找,对半查找,斐波那契查找,插值查找,分块查找)
    查找(检索):定义:从给定的数据中找到对应的K1,顺序查找:O(n)的从前向后的遍历2,对半查找,要求有序从中间开始查找,每次检查中间的是否正确,不正确就根据性质去左边or右边找2.1对半插入排序在找位置的时候是logn去找,但是最后需要换位置排序之后仍然是O()N^2)对同一序列分别......
  • 矩阵快速幂——斐波那契数列进一步优化
    快速幂优化矩阵幂、乘法对于一般的矩阵计算有\(A_{m,n}*B_{n,p}=C_{m,p}\),其中作为乘积因子的两个矩阵必须满足前因子列数与后因子行数相同积的行数等于前因子的行数,列数等于后因子的列数,任意的\(c_{i,j}\)可由定义的计算得出\(c_{i,j}=\sum_{k=0}^{n}a_{i,k}*b_{k,j}\)......
  • C中如何实现斐波那契数列的迭代和递归算法?
    在C语言中实现斐波那契数列的迭代和递归算法是学习编程和算法设计的重要部分。本文将详细介绍这两种方法的实现原理,并提供具体的代码示例。递归算法递归算法是通过函数调用自身来解决问题的一种方法。对于斐波那契数列,递归算法的实现基于其定义:第n项等于前两项之和。递归算法......