51Nod_1242 斐波那契数列的第N项

2024-01-20 15:48
文章标签 那契 数列 51nod 1242 斐波

本文主要是介绍51Nod_1242 斐波那契数列的第N项,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

                                   51Nod_1242 斐波那契数列的第N项

                                           http://www.51nod.com/Challenge/Problem.html#!#problemId=1242

 

 

题目

斐波那契数列的定义如下:F(0) = 0、F(1) = 1、F(n) = F(n - 1) + F(n - 2) (n >= 2)。(1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, ...)。给出n,求F(n),由于结果很大,输出F(n) % 1000000009的结果即可。

输入

输入1个数n(1 <= n <= 10^18)。

输出

输出F(n) % 1000000009的结果。

样例输入

11

样例输出

89

分析

矩阵快速幂

C++程序

#include<iostream>
#include<cstdio> 
#include<vector>using namespace std;typedef long long LL;
typedef vector<LL>vec;
typedef vector<vec>mat;
const LL MOD=1000000009;//矩阵乘法
mat mul(mat a,mat b)
{mat c(a.size(),vec(b[0].size()));for(int i=0;i<a.size();i++)for(int j=0;j<b[0].size();j++)for(int k=0;k<a[0].size();k++)c[i][j]=(c[i][j]+a[i][k]*b[k][j])%MOD;return c;
}//矩阵的快速模幂法 
mat solve_pow(mat a,LL n)
{mat b(a.size(),vec(a.size()));for(LL i=0;i<a.size();i++)b[i][i]=1;while(n){if(n&1)b=mul(b,a);a=mul(a,a);n>>=1;}return b;
}int main()
{LL n;mat a(2,vec(2));scanf("%lld",&n);a[0][0]=1,a[0][1]=1;a[1][0]=1,a[1][1]=0;a=solve_pow(a,n);printf("%d\n",a[1][0]);return 0;
}

 

这篇关于51Nod_1242 斐波那契数列的第N项的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/626528

相关文章

UVa 10820 Send a Table (Farey数列欧拉函数求和)

这里先说一下欧拉函数的求法 先说一下筛选素数的方法 void Get_Prime(){ /*筛选素数法*/for(int i = 0; i < N; i++) vis[i] = 1;vis[0] = vis[1] = 0;for(int i = 2; i * i < N; i++)if(vis[i]){for(int j = i * i; j < N; j += i)vis[j] =

【练习7】Fibonacci数列

链接:https://www.nowcoder.com/practice/18ecd0ecf5ef4fe9ba3f17f8d00d2d66 分析: 当n为15的时候,可以用Math.min(c-n,n-b)来判断哪个是变成斐波那契数的最小步数。 public class Main {public static void main(String[] args) {Scanner i

牛客《剑指Offer》 -- 斐波那契数列

题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 n<=39 思路 对于n=0,应返回0。 class Solution {public:int Fibonacci(int n) {if(n==0) return 0;if(n==1||n==2) return 1;int a=1,b=1,c;n= n-2;for(int i =0

面试题41:和为s的两个数VS和为s的连续正数数列

问题说明: 1.和为s的两个数问题是从一个排序的数组中找出和为s的两个数; 2.原题是找出一个即可,现在全部找出; 3.和为s的连续正数数列是给定一个数找出所有连续正数数列的和为s,例如s为9,(2,3,4)就是其中一组。 (一)和为s的两个数问题 public static int findNumbersWithSum(int[] sorted, int fromIndex, in

跳台阶(动态规划/斐波那契变形)

跳台阶 链接:https://www.nowcoder.com/acm/contest/90/A来源:牛客网 题目描述 小明在坐景驰科技研发的无人车到达了目的地。 景驰科技(JingChi.ai)是一家由人工智能技术驱动、以无人驾驶技术为核心的智能出行公司。它将打造面向中国市场的全无人驾驶。 从无人车下来以后,小明看到了一个长长的楼梯。 有一个n级台阶的楼梯,小明一次可以向上跳1

【51nod】算法马拉松4 F 移数字 【快速求N!%P】【FFT】

传送门:【51nod】算法马拉松4 F 移数字 涉及知识点:多项式求逆,多项式除法,多点插值,阶乘取模。 对于N!%P,复杂度为 O(N−−√log2N−−√) O(\sqrt N \log^2\sqrt N)。 但常数巨大,和暴力算实际复杂度只相差常数= = 这个是可以扩展到组合数取模的~ my  code: my~~code: #include <stdio.h>#includ

1037 计算数列和

### 思路 1. 初始化两个变量表示数列的前两项。 2. 使用循环计算数列的前 `n` 项,并累加每一项的值。 3. 输出累加的结果,保留四位小数。 ### 伪代码 1. 初始化 `a = 2.0`,`b = 1.0`,`sum = 0.0` 2. 循环 `n` 次:    - 计算当前项 `current = a / b`    - 将 `current` 加到 `sum`    - 更

【佳佳的斐波那契】

题目 思路 我们的目标是T[n]: ∑ 1 < = i < = n i f [ i ] \; \; \; \; \; \; \; \; \; \;\; \; \; \; \; \; \; \; \; \; \; \; \; \; \;\; \; \; \sum_{ 1<=i <=n} if[i] ∑1<=i<=n​if[i] 我们的迭代目标是: T [ n ] → T

【第0005页 · 贪心】非递减数列

【前言】本文以及之后的一些题解都会陆续整理到目录中,若想了解全部题解整理,请看这里: 第0005页 · 非递减数列         今天我们来看一道 LeetCode 上“广泛好评”的一道 Easy 题!!!(蓝色是 OJ 平台) 【非递减数列】 给你一个长度为 n 的整数数组 nums。请你判断在最多改变 1 个元素的情况下,该数组能否变为一个非递减数列。我们是这样定义一个非递

蓝桥杯入门训练——Fibonacci数列

入门训练 Fibonacci数列   时间限制:1.0s   内存限制:256.0MB         问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。 输入格式 输入包含一个整数n。 输出格式 输出一行,包含一个整数,表示F n除以10