PowMod (欧拉推式子 + 指数循环节)
最主要的步骤是用 1式子和2式子推 3式子。(难点,看了很多博客最后的时候那个式子看不懂)
- 当n, m互质时即gcd(n, m) == 1,存在phi(n * m) = phi(m) * phi(n)
- 当m为素数且n%m == 0时,存在phi(n*m) = phi(n) * m
- 记 为S(n, m),存在S(n,m) = S(n/p, m) * (p – 1) + S(n, m/p) (其中p为素数)
#include<bits/stdc++.h>
#define LL long long
using namespace std; const int MAXN = 1e7 + ;
const int mod = 1e9 + ;
bool check[MAXN];
int phi[MAXN], prime[MAXN], tot;
LL sum[MAXN],now[MAXN]; LL myPow(LL a, int p, LL mod){
LL ret = ;
while(p){
if(p & ) ret = ret * a % mod;
a = a * a % mod;
p >>= ;
}
return ret;
} void phi_and_prime_table(int N) {
memset(check,false,sizeof(check));
phi[] = ;
tot = ;
for(int i = ; i <= N; i++) {
if( !check[i] ) {
prime[tot++] = i;
phi[i] = i - ;
}
for(int j = ; j < tot; j++) {
if(i * prime[j] > N)
break;
check[i * prime[j]] = true;
if( i % prime[j] == ) {
phi[i * prime[j]] = phi[i] * prime[j];
break;
} else {
phi[i * prime[j]] = phi[i] * (prime[j] - );
}
}
}
for(int i = ; i <= N; i ++){
sum[i] = (sum[i - ] + phi[i]) % mod;
}
} LL S(int n, int m){
if( n == ) return sum[m];
if( m == ) return ;
for(int i = ; i < tot && prime[i] <= n; i ++){
if( n % prime[i] == ) {
int p = prime[i];
return (( 1LL * (p - ) * S(n/p, m))%mod + S(n, m/p) % mod ) % mod;
}
}
} LL A(int k,int p){
if(k == ) return ;
if(p == ) return ;
return myPow(k, phi[p] + A(k, phi[p]), p);
} int main() {
phi_and_prime_table();
int n,m,p;
while(~scanf("%d%d%d",&n,&m,&p)){
int k = S(n,m);
printf("%lld\n",A(k, p));
}
return ;
}
PowMod (欧拉推式子 + 指数循环节)的更多相关文章
- hdu 2837 Calculation 指数循环节套路题
Calculation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- HDU 4335 What is N?(指数循环节)题解
题意: 询问有多少数\(n\)满足\(n^{n!}\equiv b\mod p \land\ n\in[1,M]\),数据范围:\(M\leq2^{64}-1,p\leq1e5\) 思路: 这题显然要 ...
- 指数循环节 求A的B次方模C
phi(c)为欧拉函数, 欧拉定理 : 对于互质的正整数 a 和 n ,有 aφ(n) ≡ 1 mod n . A^x = A^(x % Phi(C) + Phi(C)) (mod C) (x & ...
- 指数循环节&欧拉降幂
证明:https://www.cnblogs.com/maijing/p/5046628.html 注意使用条件(B的范围) 例题: FZU1759 HDU2837 ZOJ1674 HDU4335
- hdu 5895 Mathematician QSC 指数循环节+矩阵快速幂
Mathematician QSC Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Othe ...
- HDU2837 Calculation(指数循环节)题解
题意: 已知\(f(0)=1,f(n)=(n\%10)^{f(n/10)}\),求\(f(n)\mod m\) 思路: 由扩展欧拉定理可知:当\(b>=m\)时,\(a^b\equiv a^{b ...
- hdu_2837_Calculation(欧拉函数,快速幂求指数循环节)
Assume that f(0) = 1 and 0^0=1. f(n) = (n%10)^f(n/10) for all n bigger than zero. Please calculate f ...
- Codeforces Round #454 D. Power Tower (广义欧拉降幂)
D. Power Tower time limit per test 4.5 seconds memory limit per test 256 megabytes input standard in ...
- HDU 5895 Mathematician QSC(矩阵乘法+循环节降幂+除法取模小技巧+快速幂)
传送门:HDU 5895 Mathematician QSC 这是一篇很好的题解,我想讲的他基本都讲了http://blog.csdn.net/queuelovestack/article/detai ...
随机推荐
- spring根据name或者id获取实例
@Resource(name="beanname") private ClassType scheduler; 其中ClassType需要跟实例的类型对应上.
- TensorFlow环境
vps cenots7自带的python2.7各种毛病,浪费了不少时间,装了pyhton3一下就搞定了 mac上有些依赖库需要sudo安装 vps上是基于Anaconda搭建的,感谢极客学院的教程ht ...
- vuex的小demo
效果图: vue的app.vue <template> <div> <p>click {{count}} times,count is {{evenOrOdd}}& ...
- P1879 [USACO06NOV]玉米田Corn Fields 状压dp/插头dp
正解:状压dp/插头dp 解题报告: 链接! ……我真的太菜了……我以为一个小时前要搞完的题目调错误调了一个小时……90分到100我差不多搞了一个小时…… 然后这题还是做过的……就很气,觉得确实是要搞 ...
- 按键控制led驱动
内核版本:linux2.6.22.6 硬件平台:JZ2440 驱动源码 key_drv.c : #include<linux/module.h> #include<linux/ker ...
- Redis所支持的数据结构
1.启动Redis2.Redis所支持的数据结构 2.1.Redis常用操作 2.2.String类型及操作 2.3.Hash类型及操作 2.4.List类型及操作 2.5.Set类型及操作 2.6. ...
- MongoDB与关系型数据库 区别
mysql mongodb 表 table Collection 字段 Colum Fields 行 row Document Mongo中的一些概念 ------------- ...
- CentOS安装python3.5.0+uwsgi+nginx
1安装编译工具 yum install zlib-devel bzip2-devel openssl-devel python-devel kernel-devel libffi-devel ncur ...
- MyBatis SpringMVC映射配置注意
applicationContext.xml中要配置 <!-- MyBatis 的 sqlSessionFactory --> <bean id="sqlSessionFa ...
- 解决PuTTY中文乱码
转载:http://lhdeyx.blog.163.com/blog/static/3181969720091115113716947/ 打开putty,选择 Category中的Windows--- ...