HDU4549 M斐波那契数
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项后就会非常大,所以要处理。而我们依据欧拉定理(费马小定理)可知道
#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斐波那契数的更多相关文章
- 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]. 即计算大斐波那契数再取模. 一开始看到大斐波那契数,就想到了矩阵 ...
- 斐波那契数[XDU1049]
Problem 1049 - 斐波那契数 Time Limit: 1000MS Memory Limit: 65536KB Difficulty: Total Submit: 1673 Ac ...
- 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 …… ...
- Project Euler 104:Pandigital Fibonacci ends 两端为全数字的斐波那契数
Pandigital Fibonacci ends The Fibonacci sequence is defined by the recurrence relation: F[n] = F[n-1 ...
- DP:斐波纳契数
题目:输出第 n 个斐波纳契数(Fibonacci) 方法一.简单递归 这个就不说了,小n怡情,大n伤身啊……当n=40的时候,就明显感觉到卡了,不是一般的慢. //输出第n个 Fibonacci 数 ...
- HDU 5914 Triangle(打表——斐波那契数的应用)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5914 Problem Description Mr. Frog has n sticks, whos ...
- [Swift]LeetCode509. 斐波那契数 | Fibonacci Number
The Fibonacci numbers, commonly denoted F(n) form a sequence, called the Fibonacci sequence, such th ...
- HDU 1021(斐波那契数与因子3 **)
题意是说在给定的一种满足每一项等于前两项之和的数列中,判断第 n 项的数字是否为 3 的倍数. 斐波那契数在到第四十多位的时候就会超出 int 存储范围,但是题目问的是是否为 3 的倍数,也就是模 3 ...
- POJ 3070(求斐波那契数 矩阵快速幂)
题意就是求第 n 个斐波那契数. 由于时间和内存限制,显然不能直接暴力解或者打表,想到用矩阵快速幂的做法. 代码如下: #include <cstdio> using namespace ...
随机推荐
- UIAlertView、UIActionSheet兼容iOS8
链接地址:http://blog.csdn.net/nextstudio/article/details/39959895?utm_source=tuicool 1.前言 iOS8新增了UIAlert ...
- PHP学习笔记3-逻辑运算符
逻辑运算符图解: 逻辑且&&: <?php /** * Created by PhpStorm. * User: Administrator * Date: 2015/6/26 ...
- 【集训笔记】母函数【母函数模板】【HDOJ1028【HDOJ1085
以下资料摘自 http://www.cnblogs.com/wally/archive/2012/07/13/hdu1028_1085_1171_.html 生成函数是说,构造这么一个多项式函数g(x ...
- Tri_integral Summer Training 8 总结
比赛链接 题目 B C E F G I 这是孟加拉国的区域赛. 开场ss读懂了c发现是个水题,于是去敲,结果手贱wa了一炮,不过很快就修正了错误.B题过了不少,我去读,发现是个水题,意识让Moor敲. ...
- 基于visual Studio2013解决算法导论之049活动选择问题
题目 活动选择问题 解决代码及点评 // 活动选择问题.cpp : 定义控制台应用程序的入口点. // #include<iostream> #define N 100 using ...
- 基于visual Studio2013解决C语言竞赛题之0505选数
题目
- C#操作Excel(读/写)
http://www.cnblogs.com/litianfei/archive/2008/03/21/1116906.html 写的很详细 一.操作Excel 首先导出Excel (1)示例: // ...
- 疯牛-- Aggressive cows (二分)
疯牛 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 农夫 John 建造了一座很长的畜栏,它包括N (2 <= N <= 100,000)个隔间,这些小 ...
- iOS viewController添加导航条以及返回跳转选择
给单独的viewcontroller或者在Appdelegate的主页面添加导航条,只要在viewcontroller上添加navigationcontroller,在添加此navigationcon ...
- InstallShield安装包卸载-完美卸载
在前面的日志里面介绍了在卸载的时候删除整个安装文件夹的方式.可是当遇到程序生成的文件不是在同一个文件夹下,有时甚至是用户自己定义的文件夹路径,这个时候我们卸载的时候是没有将用户自己定义的文件夹给删除掉 ...