题目:http://acm.hdu.edu.cn/showproblem.php?pid=5667

题意:如题给了一个函数式,给你a,b,c,n,p的值,叫你求f(n)%p的值

思路:先对函数取以a为底的log,令g(n)=log(a)(f(n)),结果就能得到

g(n)=b+c*g(n-1)+g(n-2);(n>3)

g(n)=0;(n=1)

g(n)=b;(n=2)

          g(n)    c  1  1    g(n-1)

用矩阵表示出来就是 g(n-1) = 1  0  0    *  g(n-2)

             b    0  0 1    b

设中间的矩阵为A 那么要求g(n)就是用A^(n-2)*g(2)来求得

                      g(1)  

                        b

而我们要求的是 f(n)%p,f(n)=a^g(n),很明显g(n)是会爆的,那么因为p是质数,所以f(n)%p=(a^(g(n)%(p-1))%p

用快速幂一样的思路来模拟矩阵的乘法就行了

矩阵的乘法三个for循环就能写掉

for(int i=1;i<=n;i++)

  for(int j=1;j<=n;j++)

    for(int k=1;k<=n;k++)

      tmp[i][j]=(tmp[i][j]+a[i][k]*b[k][j]);

然后设置三个矩阵,一个初始化为单位矩阵用来存储答案,一个存储当前的值,一个用来计算。

之后求出了g(n)的值之后,对原式还是要做一次快速幂,注意特判a%p==0的情况,0^0=1不处理

 #include <stdio.h>
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
#include <vector>
#include <math.h>
using namespace std;
long long x[][];
long long y[][];
long long t;
long long n,a,b,c,p;
long long qpow1(long long a1,long long n1 )
{
long long ans=;
while(n1)
{
if(n1&)
ans=ans*a1%p;
a1=a1*a1%p;
n1>>=;
}
return ans;
}
void qpow(long long n1)
{
long long tmp[][];
memset(x,,sizeof(x));
for(int i=;i<;i++)
x[i][i]=; while(n1)
{
memset(tmp,,sizeof(tmp));
if(n1&)
{
for(int i=;i<;i++)
{
for(int j=;j<;j++)
{
for(int k=;k<;k++)
{
tmp[i][j]=(tmp[i][j]+x[i][k]*y[k][j]) % (p-);
}
}
}
for(int i=;i<;i++)
for(int j=;j<;j++)
x[i][j]=tmp[i][j];
}
memset(tmp,,sizeof(tmp));
for(int i=;i<;i++)
{
for(int j=;j<;j++)
{
for(int k=;k<;k++)
{
tmp[i][j]=(tmp[i][j]+y[i][k]*y[k][j]) % (p-);
}
}
}
for(int i=;i<;i++)
for(int j=;j<;j++)
y[i][j]=tmp[i][j];
n1>>=;
}
}
int main()
{
scanf("%lld",&t);
while(t--)
{
scanf("%lld %lld %lld %lld %lld",&n,&a,&b,&c,&p);
if(a%p==)
{
printf("0\n");
continue;
}
memset(y,,sizeof(y));
y[][]=c,y[][]=,y[][]=;
y[][]=,y[][]=,y[][]=;
y[][]=,y[][]=,y[][]=;
qpow(n-);
long long ans1=(x[][]*b+b*x[][])%(p-);
printf("%lld\n",qpow1(a,ans1));
}
return ;
}

HDOJ 5667 Sequence//费马小定理 矩阵快速幂的更多相关文章

  1. bzoj5118: Fib数列2(费马小定理+矩阵快速幂)

    题目大意:求$fib(2^n)$ 就是求fib矩阵的(2^n)次方%p,p是质数,根据费马小定理有 注意因为模数比较大会爆LL,得写快速乘法... #include<bits/stdc++.h& ...

  2. HDU 4549 (费马小定理+矩阵快速幂+二分快速幂)

    M斐波那契数列 Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Submit Statu ...

  3. 【费马小定理+矩阵快速幂】HDU4549——M斐波那契数列

    [题目大意] M斐波那契数列F[n]是一种整数数列,它的定义如下:F[0] = aF[1] = bF[n] = F[n-1] * F[n-2] ( n > 1 )现在给出a, b, n,求出F[ ...

  4. HDOJ 4549 M斐波那契数列 费马小定理+矩阵高速幂

    MF( i ) = a ^ fib( i-1 ) * b ^ fib ( i )   ( i>=3) mod 1000000007 是质数 , 依据费马小定理  a^phi( p ) = 1 ( ...

  5. hdu4704之费马小定理+整数快速幂

    Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Subm ...

  6. hdu 4704 Sum(组合,费马小定理,快速幂)

    题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4704: 这个题很刁是不是,一点都不6,为什么数据范围要开这么大,把我吓哭了,我kao......说笑的, ...

  7. ACM-ICPC 2018 焦作赛区网络预赛- G:Give Candies(费马小定理,快速幂)

    There are N children in kindergarten. Miss Li bought them NNN candies. To make the process more inte ...

  8. 【bzoj5118】Fib数列2 费马小定理+矩阵乘法

    题目描述 Fib定义为Fib(0)=0,Fib(1)=1,对于n≥2,Fib(n)=Fib(n-1)+Fib(n-2) 现给出N,求Fib(2^n). 输入 本题有多组数据.第一行一个整数T,表示数据 ...

  9. Fib数列2 费马小定理+矩阵乘法

    题解: 费马小定理 a^(p-1)=1(mod p) 这里推广到矩阵也是成立的 所以我们可以对(2^n)%(p-1) 然后矩阵乘法维护就好了 模数较大使用快速乘

随机推荐

  1. OSS网页上传和断点续传(终结篇)

    有了之前OSS网页上传和断点续传(OSS配置篇)和(STSToken篇),其万事俱备只欠东风啦,此终结篇即将展示OSS上传文件及断点续传的无限魅力... 网络卡顿.延迟能续传吗?能! 关了浏览器,还能 ...

  2. MySQL复制表的方式以及原理和流程

    复制表的俩种方式: 第一.只复制表结构到新表 create table 新表 select * from 旧表 where 1=2 或者 create table 新表 like 旧表 第二.复制表结 ...

  3. InvalidDataAccessResourceUsageException:mysql保留字引发的血案

    org.springframework.dao.InvalidDataAccessResourceUsageException: could NOT EXECUTE statement; SQL [n ...

  4. sso单点登录系统(解决session共享)

    场景:假设一个用户将自己的登录信息提交到后台,如果session保存的信息分布在多台机器上,并且不共享,那么可能导致用户的登录信息出现短暂的丢失,为什么这样讲,因为用户访问服务器中间还要经过负载均衡服 ...

  5. Linux之hosts文件

    一.序言: 今天同事部署环境遇到问题, 原因1:修改了主机名,在/etc/hosts文件中加了3台集群的ip和主机名,但是将默认的前两行也改了,没注意看改了哪里, 现象: 1.zookeeper单台可 ...

  6. Python之操作Excel

    使用之前先导入三个模块: import xlwt #只能写Excel import xlrd #只能读Excel import xlutils #修改Excel,在原来的基础上修改 一.写EXCEL ...

  7. Jmeter之上传数据流(图片、文本等)请求

    MIME类型~Content-Type: 参数名称~name

  8. [转帖]关于CP936

    来源: 知乎:https://www.zhihu.com/question/35609295/answer/63780022 CP936和UTF-8本身和Python是毫无关联的. CP936其实就是 ...

  9. Granfana+PostgreSQL

    建表: create table pdm_log( id serial primary key, date_time timestamp with time zone DEFAULT CURRENT_ ...

  10. js 解决中文乱码的问题

    1.对象 request response 对象setCharacterEncoding=UTF-8 1 <%@ page language="java" contentTy ...