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

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

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

 
Input
输入包含多组测试数据;
每组数据占一行,包含3个整数a, b, n( 0 <= a, b, n <= 10^9 )
 
Output
对每组测试数据请输出一个整数F[n],由于F[n]可能很大,你只需输出F[n]对1000000007取模后的值即可,每组数据输出一行。
 
Sample Input
0 1 0
6 10 2
 
Sample Output
0
60

把F往后递推可以看出是  f(n)=a^fib(n-1)*b^fib(n),n>=2,然后发现正常推fib并不行,超时(表示并不会用矩阵求)

这题主要是求出fib数列,然后再进行快速幂即可。

费马小定理:如果p为质数且a,p互质      a^(p-1) = 1(mod  p)

所以 a^n = a^(  n%(p-1) ) * 1 * 1........     (最开始一直不理解费马是怎么转换过来的)

通俗点:

A^B %C   这题的C是质素,而且A,C是互质的。
所以直接A^(B%(C-1)) %C     (来自kuangbin大神)

用矩阵快速幂求出fib数列基本就搞定
(矩阵部分不会写,果然太菜,啥都不会- -)

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 10100
typedef long long ll;
using namespace std;
int n,m;
unsigned long long a[N],ins[70];
bool flag;
struct Matrix
{
ll p[2][2];
}; Matrix mul(Matrix a, Matrix b) //矩阵相乘
{
Matrix res;
for(int i = 0; i < 2; i++)
for(int j = 0; j < 2; j++)
{
res.p[i][j] = 0;
for(int k = 0; k < 2; k++)
{
res.p[i][j] += a.p[i][k] * b.p[k][j];
res.p[i][j] %= 1000000006;
}
}
return res;
} Matrix pow_matrix(Matrix a, ll n) //矩阵快速幂
{
Matrix res;
res.p[0][0] = res.p[1][1] = 1;
res.p[0][1] = res.p[1][0] = 0;
while(n != 0)
{
if(n & 1)
res = mul(res, a);
a = mul(a, a);
n >>= 1;
}
return res;
}
ll pow_mod(ll a, ll n) //二分快速幂
{
if(n == 0) return 1;
ll x =pow_mod(a,n/2);
ll ans = x*x%1000000007;
if(n % 2) ans = ans*a%1000000007;
return ans;
} int main()
{
int a,b,n;
Matrix tmp;
tmp.p[0][0] = 0;
tmp.p[0][1] = tmp.p[1][1] = tmp.p[1][0] = 1;
while(scanf("%d%d%d",&a,&b,&n)!=EOF)
{
Matrix q = pow_matrix(tmp,n);
ll ans = 1;
ans = (pow_mod(a, q.p[0][0]) * pow_mod(b, q.p[1][0])) % 1000000007;
printf("%I64d\n",ans);
}
return 0;
}

  

hdu4549(费马小定理 + 快速幂)的更多相关文章

  1. 数论 --- 费马小定理 + 快速幂 HDU 4704 Sum

    Sum Problem's Link:   http://acm.hdu.edu.cn/showproblem.php?pid=4704 Mean: 给定一个大整数N,求1到N中每个数的因式分解个数的 ...

  2. 2014多校第一场 I 题 || HDU 4869 Turn the pokers(费马小定理+快速幂模)

    题目链接 题意 : m张牌,可以翻n次,每次翻xi张牌,问最后能得到多少种形态. 思路 :0定义为反面,1定义为正面,(一开始都是反), 对于每次翻牌操作,我们定义两个边界lb,rb,代表每次中1最少 ...

  3. BZOJ_[HNOI2008]_Cards_(置换+Burnside引理+乘法逆元+费马小定理+快速幂)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1004 共n个卡片,染成r,b,g三种颜色,每种颜色的个数有规定.给出一些置换,可以由置换得到的 ...

  4. hdu_4869(费马小定理+快速幂)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4869 Turn the pokers Time Limit: 2000/1000 MS (Java/O ...

  5. HDU 4704 Sum(隔板原理+组合数求和公式+费马小定理+快速幂)

    题目传送:http://acm.hdu.edu.cn/showproblem.php?pid=4704 Problem Description   Sample Input 2 Sample Outp ...

  6. hdu1576-A/B-(同余定理+乘法逆元+费马小定理+快速幂)

    A/B Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  7. 牛客训练四:Applese 涂颜色(费马小定理+快速幂)

    题目链接:传送门 思路: 考虑每一列有2种颜色,总共有n行,每一行的第一个格确定颜色,由于左右颜色不相同,后面的行就确定了. 所以总共有2^n中结果. 由于n太大,所以要用到费马小定理a^n%mod= ...

  8. hdu 4704 sum(费马小定理+快速幂)

    题意: 这题意看了很久.. s(k)表示的是把n分成k个正整数的和,有多少种分法. 例如: n=4时, s(1)=1     4 s(2)=3     1,3      3,1       2,2 s ...

  9. hdu-5667 Sequence(矩阵快速幂+费马小定理+快速幂)

    题目链接: Sequence Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Others) ...

随机推荐

  1. electron-vue工程创建

    没有vue创建经验请移步至 vue下载与安装 使用vue创建electron-vue工程 vue init simulatedgreg/electron-vue my-project 安装elemen ...

  2. 团队作业7——第二次项目冲刺(Beta版本12.05-12.07)

    1.当天站立式会议照片 本次会议内容:1:每个人汇报自己完成的工作.2:组长分配各自要完成的任务. 2.每个人的工作 黄进勇:项目整合,后台代码. 李勇:前台界面优化. 何忠鹏:数据库模块. 郑希彬: ...

  3. 【iOS】OC-Quartz2D简单使用

    什么是Quartz2D Quartz 2D是一个二维绘图引擎,同时支持iOS和Mac系统 作用 ? 1 2 3 4 5 6 7 8 9 <code>Quartz 2D能完成的工作 绘制图形 ...

  4. nyoj 非洲小孩

    非洲小孩 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 家住非洲的小孩,都很黑.为什么呢?第一,他们地处热带,太阳辐射严重.第二,他们不经常洗澡.(常年缺水,怎么洗 ...

  5. sqlserver学习_01

    sqlserver的学习成长之路,每一个技术的学习过程都是值得让人回味的,现在百度上关于sqlser的资料很多,但是都太杂,希望能为大家分享一点简单易懂的干货,跟大家一起进步学习. 一.建表 1.创建 ...

  6. NATAPP 内网映射,Visual Studio ,C# 实现本地开发微信公众号,本地调试无需服务器

    点击软件安装教程,根据安装教程,注册帐号,下载软件,配置软件.配置完后如下图,途中红色位置免费版本是随机的. 红色位置是自己的映射域名. 打开VS,并且打开项目,右键项目,在web 选项中修改项目UR ...

  7. Spring知识点回顾(03)Bean的 Scope

    sigleton prototype request session globalsession stepscope

  8. 表单提交中的input、button、submit的区别

    1.input[type=submit] 我们直接来看例子: 代码如下: <form> <input name="name"> <input type ...

  9. Python基础--函数的定义和调用

    一.函数的作用: 提高代码的可读性,减少代码的冗余,方便调用和修改,组织结构清晰 二.函数的定义:函数遵循先定义后调用的原则 1.无参函数 def funcname(): #def 是关键字,后跟函数 ...

  10. Python:使用youtube-dl+ffmpeg+FQ软件下载youtube视频

    声明:本文所述内容都是从http://blog.csdn.net/u011475134/article/details/71023612博文中学习而来. 背景: 一同学想通过FQ软件下载一些youtu ...