好题!

/*
gi=c^i * fi
gi=gi-1 * gi-2 * gi-3
把g1,g2,g3质因数分解
g1=p1^e11 * p2^e12 * p3^e13 ... pk^e1k
g2=p1^e21 * p2^e22 * p3^e23 ... pk^e2k
g3=p1^e31 * p2^e32 * p3^e33 ... pk^e3k
然后构造初始矩阵
e11 e12 e13 ... e1k
e21 e22 e23 ... e2k
e31 e32 e33 ... e3k
这个3*m矩阵前面乘以系数矩阵3*3
0 1 0
1 0 0
1 1 1
矩阵快速幂得到最后矩阵
en1 en2 en3 ... enk
...
... 即每个质因子最后的指数
然后计算出gn=c^n * fn
fn = gn*inv(c^n) 注意!!! a^x = a^(x % phi(p)) (mod p)
所以矩阵里乘法的模数时mod-1 !
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define maxn 2000005
#define mod 1000000007
ll n,c,f1,f2,f3,A[][],M[][]; set<ll>s;
ll p[],E[][],k;
void divide(ll x){
ll tmp=x;
for(ll i=;i*i<=tmp;i++)
if(tmp%i==){
s.insert(i);
while(tmp%i==)tmp/=i;
}
if(tmp>)s.insert(tmp);
}
void calc(ll x,int id){
for(ll i=;i<=k;i++)
while(x%p[i]==)
E[id][i]++,x/=p[i];
} void mul1(ll A[][],ll B[][]){
ll res[][]={};
for(int i=;i<=;i++)
for(int j=;j<=;j++)
for(int k=;k<=;k++)
res[i][j]=(res[i][j]+A[i][k]*B[k][j]%(mod-))%(mod-);
memcpy(A,res,sizeof res);
}
void mul2(ll A[][],ll B[][]){
ll res[][]={};
for(int i=;i<=;i++)
for(int j=;j<=k;j++)
for(int l=;l<=;l++)
res[i][j]=(res[i][j]+A[i][l]*B[l][j]%(mod-))%(mod-);
memcpy(B,res,sizeof res);
} ll Pow(ll a,ll b){
ll res=;
while(b){
if(b%)
res=res*a%mod;
b>>=;a=a*a%mod;
}
return res;
} int main(){
cin>>n>>f1>>f2>>f3>>c;
divide(f1);divide(f2);divide(f3);divide(c);
for(auto it:s)
p[++k]=it;
calc(f1*c,);
calc(f2*c,);calc(c,);
calc(f3*c,);calc(c,);calc(c,);
A[][]=;A[][]=;A[][]=;
A[][]=;A[][]=;A[][]=;
A[][]=;A[][]=;A[][]=; ll b=n-,res[][]={};
for(int i=;i<=;i++)
res[i][i]=;
while(b){
if(b%)
mul1(res,A);
b>>=;mul1(A,A);
} mul2(res,E); ll ans=;//ans=c^n * fn
for(int i=;i<=k;i++)
ans=ans*Pow(p[i],E[][i])%mod;
ll tmp=Pow(c,n);
tmp=Pow(tmp,mod-);//求逆元
ans=ans*tmp%mod;
cout<<ans<<'\n';
}

*/

欧拉定理+质因子分解+矩阵快速幂——cf1182E的更多相关文章

  1. HDU4549 M斐波那契数列 矩阵快速幂+欧拉函数+欧拉定理

    M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Sub ...

  2. [bzoj 1409] Password 矩阵快速幂+欧拉函数

    考试的时候想到了矩阵快速幂+快速幂,但是忘(bu)了(hui)欧拉定理. 然后gg了35分. 题目显而易见,让求一个数的幂,幂是斐波那契数列里的一项,考虑到斐波那契也很大,所以我们就需要欧拉定理了 p ...

  3. 【BZOJ2875】随机数生成器(矩阵快速幂)

    [BZOJ2875]随机数生成器(矩阵快速幂) 题面 Description 栋栋最近迷上了随机算法,而随机数是生成随机算法的基础.栋栋准备使用线性同余法(Linear Congruential Me ...

  4. HDU 2243考研路茫茫——单词情结 (AC自动机+矩阵快速幂)

    背单词,始终是复习英语的重要环节.在荒废了3年大学生涯后,Lele也终于要开始背单词了. 一天,Lele在某本单词书上看到了一个根据词根来背单词的方法.比如"ab",放在单词前一般 ...

  5. CF1106F Lunar New Year and a Recursive Sequence 原根、矩阵快速幂、BSGS

    传送门 好久没写数论题了写一次调了1h 首先发现递推式是一个乘方的形式,线性递推和矩阵快速幂似乎都做不了,那么是否能够把乘方运算变成加法运算和乘法运算呢? 使用原根!学过\(NTT\)的都知道\(99 ...

  6. 【BZOJ2875】【NOI2012】随机数生成器(矩阵快速幂)

    [BZOJ2875]随机数生成器(矩阵快速幂) 题面 Description 栋栋最近迷上了随机算法,而随机数是生成随机算法的基础.栋栋准备使用线性同余法(Linear Congruential Me ...

  7. hdu 4549 M斐波拉契 (矩阵快速幂 + 费马小定理)

    Problem DescriptionM斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = aF[1] = bF[n] = F[n-1] * F[n-2] ( n > 1 ) 现在 ...

  8. HDU 3221 矩阵快速幂+欧拉函数+降幂公式降幂

    装载自:http://www.cnblogs.com/183zyz/archive/2012/05/11/2495401.html 题目让求一个函数调用了多少次.公式比较好推.f[n] = f[n-1 ...

  9. hdu4549矩阵快速幂+费马小定理

    转移矩阵很容易求就是|0  1|,第一项是|0| |1  1|             |1| 然后直接矩阵快速幂,要用到费马小定理 :假如p是质数,且gcd(a,p)=1,那么 a(p-1)≡1(m ...

随机推荐

  1. myEclipse环境下配置springMvc项目,进行简单的请求

    1."File-->New-->WebProject"新建一个web项目,命名为springMvc 2.将所需要用到的jar包复制到WEB-INF/lib路径下,然后右 ...

  2. 如何实现qq消息轰炸

    1.新建一个文本文档复制以下代码 Set WshShell = WScript.CreateObject("Wscript.Shell")WshShell.AppActivate& ...

  3. Linux 中 sqlite3 基本操作

    https://www.runoob.com/sqlite/sqlite-commands.html 一 .linux 下安装数据库和创建一个数据库 1. Linux 下安装sqlite3 需要两个命 ...

  4. Linux 进程间通信 有名管道(fifo)

    有名管道特点: 1)无名管道只能用于具有亲缘关系的进程之间,这就限制了无名管道的使用范围 2)有名管道可以使互不相关的两个进程互相通信. 3)有名管道可以通过路径名来指出,并且在文件系统中可见,但内容 ...

  5. MySQL 开始

    安装,配置环境变量啥的,网上一抓一大堆,不说了.就说我再实际操作中遇到的问题. 1   添加自增列 点击apply,直接提示一个错误....百思不得其解..上图... 添加不了自增列....好恐怖.. ...

  6. 文本聚合函数(wm_concat, listagg, group_concat, string_agg)

    实现目标   1.聚合文本   2.聚合文本(去重)   3.聚合文本(去重),按照指定字段排序   4.聚合文本(去重),按照指定字段排序,替换默认逗号分隔符 MySQL: group_concat ...

  7. 47. List中特有的方法

    集合的体系:--------------| Collection  单列集合的根接口----------| List 如果实现了List接口的集合类,该类具备的特点是:有序,可重复---------- ...

  8. Zookeeper_ZAB协议

    ZAB协议 ZAB协议简介 ZAB:(Zookeeper Atomic Broadcast),zk原子消息广播协议,是专为ZK设计的一中支持崩溃恢复的原子广播协议,是一种Paxos协议的优化算法,在Z ...

  9. Java中获取前一天和后一天时间

    今天在开发项目的时候遇到一个问题就是怎么获取当前时间的前一天和后一天,这个实现的逻辑并不复杂,自己要写的话的也不是难事,但是貌似感觉没必要自己写这样的方法,想想Java中的Calendar类应该有这样 ...

  10. (转)ab(apachebench)测试与loadrunner

    转:http://blog.csdn.net/gzh0222/article/details/7172341 ab的全称是ApacheBench,是 Apache 附带的一个小工具,专门用于 HTTP ...