好题!

/*
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. workman

    workman安装: 环境安装: 检测依赖环境是否安装 rpm -qa | grep “软件或者包的名字”或者 yum list installed eg: rpm -qa | grep libeve ...

  2. pandas--排序和排名

    排序 要对行或列索引进行排序,可使用sort_index方法,它将返回一个已排序的新对象: Series 1.对Series索引排序 obj=Series(range(4),index=['d','a ...

  3. mfc中的_T

    mfc 中的字符串表示常用_T,意为text,定义为宏定义,可以方便的定义所有字符串为UNICODE(16位,长字符)或者ANSI(8位,短字符). 如果对于所有的字符串定义了_T并且定义了预处理标志 ...

  4. jQuery - 动画相关

    // 显示隐藏 $("div").show(); // 显示 $("div").hide(); // 隐藏 // 显示过程3秒, 3秒之内, 元素的宽,高和透明 ...

  5. __str__方法

    """str()就是可以自定义输出返回值,必须是str字符串""" class Dog: def __init__(self, name): ...

  6. Linkedlist 详解

    基本介绍 Linkedlist基于链表的动态数组(双向链表): 可以被当作堆栈(后进先出).队列(先进先出)或双端队列进行操作. 数据添加删除效率高,只需要改变指针指向即可,但是访问数据的平均效率低, ...

  7. JavaWeb学习篇之----Session&&Cookie

    今天继续来看看JavaWeb的相关知识,这篇文章主要来讲一下Session和Cookie的相关知识,首先我们来看一下Cookie的相关知识: 一.Cookie 简介: Cookie是客户端技术,服务器 ...

  8. 思维题+贪心——牛客多校第一场C

    /* 给定一组n维向量 A=(a1/m,a2/m,a3/m ... an/m), 求另一个n维向量 P=(p1,p2,p3...pn),满足sum{pi}=1,使得ans=sum{(ai/m-pi)^ ...

  9. Java语法清单-快速回顾(开发)

    Java CheatSheet 01.基础 hello,world! public static void main(String[] args) { System.out.println(" ...

  10. 自定义alert 确定、取消功能

    以删除为例,首先新建html <table border="1" cellpadding="0" cellspacing="0" id ...