hdu4549(费马小定理 + 快速幂)
F[0] = a
F[1] = b
F[n] = F[n-1] * F[n-2] ( n > 1 )
现在给出a, b, n,你能求出F[n]的值吗?
每组数据占一行,包含3个整数a, b, n( 0 <= a, b, n <= 10^9 )
6 10 2
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........ (最开始一直不理解费马是怎么转换过来的)
通俗点:
用矩阵快速幂求出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(费马小定理 + 快速幂)的更多相关文章
- 数论 --- 费马小定理 + 快速幂 HDU 4704 Sum
Sum Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=4704 Mean: 给定一个大整数N,求1到N中每个数的因式分解个数的 ...
- 2014多校第一场 I 题 || HDU 4869 Turn the pokers(费马小定理+快速幂模)
题目链接 题意 : m张牌,可以翻n次,每次翻xi张牌,问最后能得到多少种形态. 思路 :0定义为反面,1定义为正面,(一开始都是反), 对于每次翻牌操作,我们定义两个边界lb,rb,代表每次中1最少 ...
- BZOJ_[HNOI2008]_Cards_(置换+Burnside引理+乘法逆元+费马小定理+快速幂)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1004 共n个卡片,染成r,b,g三种颜色,每种颜色的个数有规定.给出一些置换,可以由置换得到的 ...
- hdu_4869(费马小定理+快速幂)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4869 Turn the pokers Time Limit: 2000/1000 MS (Java/O ...
- HDU 4704 Sum(隔板原理+组合数求和公式+费马小定理+快速幂)
题目传送:http://acm.hdu.edu.cn/showproblem.php?pid=4704 Problem Description Sample Input 2 Sample Outp ...
- hdu1576-A/B-(同余定理+乘法逆元+费马小定理+快速幂)
A/B Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- 牛客训练四:Applese 涂颜色(费马小定理+快速幂)
题目链接:传送门 思路: 考虑每一列有2种颜色,总共有n行,每一行的第一个格确定颜色,由于左右颜色不相同,后面的行就确定了. 所以总共有2^n中结果. 由于n太大,所以要用到费马小定理a^n%mod= ...
- hdu 4704 sum(费马小定理+快速幂)
题意: 这题意看了很久.. s(k)表示的是把n分成k个正整数的和,有多少种分法. 例如: n=4时, s(1)=1 4 s(2)=3 1,3 3,1 2,2 s ...
- hdu-5667 Sequence(矩阵快速幂+费马小定理+快速幂)
题目链接: Sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
随机推荐
- 需求分析&原型设计
需求分析&原型设计 需求分析 访问软件项目真实用户 首先本项目的用户是这个需要做简单四则运算的用户(我们团队通过对家里有三四年级小学生(需要做简单四则运算)的简单采访):反映了几个主要的问题: ...
- 关于Mac OS 使用GIT的引导
1. 下载Git installer 链接地址:https://ncu.dl.sourceforge.net/project/git-osx-installer/git-2.14.1-intel-un ...
- 【iOS】Swift GCD-下
欢迎来到本GCD教程的第二同时也是最终部分! 在第一部分中,你学到了并发,线程以及GCD的工作原理.通过使用dispatch_barrrier和dispatch_sync,你做到了让PhotoMana ...
- Linux 目录与文件管理
1. 目录与路径1.1 相对路径与绝对路径1.2 目录的相关操作: cd, pwd, mkdir, rmdir1.3 关于执行文件路径的变量: $PATH2. 档案与目录管理2.1 档案与目录的检视: ...
- L2 约束的最小二乘学习法
\[ \begin{align*} &J_{LS}{(\theta)} = \frac { 1 }{ 2 } { \left\| \Phi \theta - y \right\| }^{ 2 ...
- django models的点查询/跨表查询/双下划线查询
django models 在日常的编程中,我们需要建立数据库模型 而往往会用到表与表之间的关系,这就比单表取数据要复杂一些 在多表之间发生关系的情形下,我们如何利用models提供的API的特性获得 ...
- JavaScript-Jquery实现全选反选
html: <dl> <dt><input type="checkbox" id="checkAll" /><labe ...
- MySQL 避免重复数据的批量插入与批量更新
[转发] 导读 我们在向数据库里批量插入数据的时候,会遇到要将原有主键或者unique索引所在记录更新的情况,而如果没有主键或者unique索引冲突的时候,直接执行插入操作. 这种情况下,有三种方式执 ...
- PHP模式设计之单例模式、工厂模式、注册树模式、适配器模式、观察者模式
php模式设计之单例模式 什么是单例模式? 单例模式是指在整个应用中只有一个实例对象的设计模式 为什么要用单例模式? php经常要链接数据库,如果在一个项目中频繁建立连接数据库,会造成服务器资源的很大 ...
- Python内置函数(64)——classmethod
英文文档: classmethod(function) Return a class method for function. A class method receives the class as ...