M斐波那契数列

题目分析:

M斐波那契数列F[n]是一种整数数列,它的定义例如以下:



F[0] = a

F[1] = b

F[n] = F[n-1] * F[n-2] ( n > 1 )

如今给出a, b, n,你能求出F[n]的值吗?

算法分析:

经过前面几项的推导,你会发现当中a,b的个数为斐波那契数同样。而我们知道斐波那契数是到20项后就会非常大,所以要处理。而我们依据欧拉定理(费马小定理)可知道

A^(P-1)同余 1 模C,这题的C是质数,并且A,C是互质的。
所以直接A^(B%(C-1)) %C = A^B % C
 
比較一般的结论是 A^B %C = A^( B%phi(C)+phi(C) ) %C     B>=phi(C)










#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std; typedef long long LL;
const int MOD = 1000000007;
struct Matrix{
LL mat[2][2];
LL row,col;
Matrix(){};
Matrix(LL _r,LL _c):row(_r),col(_c){};
}; Matrix I(2,2),P(2,2); void Init(){
P.mat[0][0] = 0;
P.mat[0][1] = P.mat[1][0] = P.mat[1][1] = 1; I.mat[0][0] = I.mat[1][1] = 1;
I.mat[0][1] = I.mat[1][0] = 0;
} //矩阵相乘
Matrix mul(Matrix A,Matrix B,LL mod){
Matrix C(2,2);
memset(C.mat,0,sizeof(C.mat)); for(int i = 0;i < A.row;++i){
for(int k = 0;k < B.row;++k){
for(int j = 0;j < B.col;++j){
C.mat[i][j] = (C.mat[i][j] + A.mat[i][k] * B.mat[k][j] % mod) % mod;
}
}
}
return C;
} //fib[n] % (c - 1)
Matrix powmod(Matrix A,LL n,LL mod){
Matrix B = I;
while(n > 0){
if(n & 1) B = mul(B,A,mod);
A = mul(A,A,mod);
n >>= 1;
}
return B;
} //a ^ b % c
LL powmod(LL a,LL n,LL mod){
LL res = 1;
while(n > 0){
if(n & 1) res = (res * a) % mod;
a = a * a % mod;
n >>= 1;
}
return res;
} int main()
{
Init();
LL a,b,n;
while(~scanf("%I64d%I64d%I64d",&a,&b,&n)){
Matrix A = powmod(P,n,MOD - 1); //fib[n] % (mod -1 )
printf("%I64d\n",powmod(a,A.mat[0][0],MOD) * powmod(b,A.mat[1][0],MOD) % MOD);
}
return 0;
}




HDU4549 M斐波那契数的更多相关文章

  1. UVA 11582 Colossal Fibonacci Numbers! 大斐波那契数

    大致题意:输入两个非负整数a,b和正整数n.计算f(a^b)%n.其中f[0]=f[1]=1, f[i+2]=f[i+1]+f[i]. 即计算大斐波那契数再取模. 一开始看到大斐波那契数,就想到了矩阵 ...

  2. 斐波那契数[XDU1049]

    Problem 1049 - 斐波那契数 Time Limit: 1000MS   Memory Limit: 65536KB   Difficulty: Total Submit: 1673  Ac ...

  3. C++求斐波那契数

    题目内容:斐波那契数定义为:f(0)=0,f(1)=1,f(n)=f(n-1)+f(n-2)(n>1且n为整数) 如果写出菲氏数列,则应该是: 0 1 1 2 3 5 8 13 21 34 …… ...

  4. Project Euler 104:Pandigital Fibonacci ends 两端为全数字的斐波那契数

    Pandigital Fibonacci ends The Fibonacci sequence is defined by the recurrence relation: F[n] = F[n-1 ...

  5. DP:斐波纳契数

    题目:输出第 n 个斐波纳契数(Fibonacci) 方法一.简单递归 这个就不说了,小n怡情,大n伤身啊……当n=40的时候,就明显感觉到卡了,不是一般的慢. //输出第n个 Fibonacci 数 ...

  6. HDU 5914 Triangle(打表——斐波那契数的应用)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5914 Problem Description Mr. Frog has n sticks, whos ...

  7. [Swift]LeetCode509. 斐波那契数 | Fibonacci Number

    The Fibonacci numbers, commonly denoted F(n) form a sequence, called the Fibonacci sequence, such th ...

  8. HDU 1021(斐波那契数与因子3 **)

    题意是说在给定的一种满足每一项等于前两项之和的数列中,判断第 n 项的数字是否为 3 的倍数. 斐波那契数在到第四十多位的时候就会超出 int 存储范围,但是题目问的是是否为 3 的倍数,也就是模 3 ...

  9. POJ 3070(求斐波那契数 矩阵快速幂)

    题意就是求第 n 个斐波那契数. 由于时间和内存限制,显然不能直接暴力解或者打表,想到用矩阵快速幂的做法. 代码如下: #include <cstdio> using namespace ...

随机推荐

  1. 【QT相关】类头文件解读、QT编辑模式、读取text文本

    Wizard产生的头文件类包含了必须的#include文件.构造函数.析构函数和UI对象: #include <QMainWindow> namespace Ui {class Notep ...

  2. jQuery中的index方法介绍

    从jq api手册摘过来的内容,index这个方法在写 tab silder 之类的组件还是比较有用的说. js没有传统的函数重载的概念,但是根据传入参数的不同,js的函数可以完成不同的功能,也可说是 ...

  3. javaScript 网页特效 输出语句

    大家好,我是小强老师,今天主要讲解 三个最为常用的输出语句.  alert() 弹出警示框 window.alert(‘继续学习’);  完整的写法 效果如下: 因为alert 属于window 对象 ...

  4. Android编程心得-设计一个可重用的自定义Dialog

            我们在实际开发过程中,会遇到一个问题,我们的Dialog如果使用一般的方法进行设置调用出来,会有很多的重复代码,如何将Dialog按照自己的思路设计呢,并让其可重用呢,下面我来介绍一下 ...

  5. hpu第五届acm比赛

    vijos P1211生日日数   描述 CCC老师的生日是YY年MM月DD日,他想知道自己出生后第一万天纪念日的日期(出生日算第0天). 格式 输入格式 从文件的第一行分别读入YY,MM,DD其中1 ...

  6. IOS 获取网络图像尺寸 更改 图像色彩值 什么一套方法灰色

    直接在代码 头文件 // 图片处理 0 半灰色 1 灰度 2 深棕色 3 反色 +(UIImage*)imageWithImage:(UIImage*)image grayLevelType:(UII ...

  7. cxf调用c#的webservice

    java调用c#的webservice,如今已经測试通过.并且用到了项目中. 如今把实现方式和遇到的问题分享给大家.详细源代码例如以下: JaxWsDynamicClientFactory dcf = ...

  8. C - 链表,推荐

    Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Descr ...

  9. C++算术运算符与算术表达式

    基本的算术运算符 在本章中主要介绍算术运算符与算术表达式,赋值运算符与赋值表达式,逗号运算符与逗号表达式,其他运算符将在以后各章中陆续介绍. 常见算数运算符 运算符 说明 举例 + 加法运算符,或正值 ...

  10. 【转】windows 7系统安装与配置Tomcat服务器环境

    原文链接: windows 7系统安装与配置Tomcat服务器环境 工具/原料 jdk-8u51-windows-x64(我的系统是64位系统,32位的请选x86下载)下载地址:http://www. ...