最主要的步骤是用 1式子和2式子推 3式子。(难点,看了很多博客最后的时候那个式子看不懂)

  1. 当n, m互质时即gcd(n, m) == 1,存在phi(n * m) = phi(m) * phi(n)
  2. 当m为素数且n%m == 0时,存在phi(n*m) = phi(n) * m
  3. 记  为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 (欧拉推式子 + 指数循环节)的更多相关文章

  1. hdu 2837 Calculation 指数循环节套路题

    Calculation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  2. HDU 4335 What is N?(指数循环节)题解

    题意: 询问有多少数\(n\)满足\(n^{n!}\equiv b\mod p \land\ n\in[1,M]\),数据范围:\(M\leq2^{64}-1,p\leq1e5\) 思路: 这题显然要 ...

  3. 指数循环节 求A的B次方模C

    phi(c)为欧拉函数, 欧拉定理 : 对于互质的正整数 a 和 n ,有 aφ(n)  ≡ 1 mod n  . A^x = A^(x % Phi(C) + Phi(C)) (mod C) (x & ...

  4. 指数循环节&欧拉降幂

    证明:https://www.cnblogs.com/maijing/p/5046628.html 注意使用条件(B的范围) 例题: FZU1759 HDU2837 ZOJ1674 HDU4335

  5. hdu 5895 Mathematician QSC 指数循环节+矩阵快速幂

    Mathematician QSC Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Othe ...

  6. HDU2837 Calculation(指数循环节)题解

    题意: 已知\(f(0)=1,f(n)=(n\%10)^{f(n/10)}\),求\(f(n)\mod m\) 思路: 由扩展欧拉定理可知:当\(b>=m\)时,\(a^b\equiv a^{b ...

  7. 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 ...

  8. 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 ...

  9. HDU 5895 Mathematician QSC(矩阵乘法+循环节降幂+除法取模小技巧+快速幂)

    传送门:HDU 5895 Mathematician QSC 这是一篇很好的题解,我想讲的他基本都讲了http://blog.csdn.net/queuelovestack/article/detai ...

随机推荐

  1. 只读事务@Transactional(readOnly = true)

        定义 从设置的时间点(时间点beta)开始到事务结束的过程中,该事务将看不见其他事务所提交的数据,即查询中不会出现别人在beta之后提交的数据.     应用场合 对于一个函数,如果执行的只是 ...

  2. es的scoll滚动查询技术

    如果一次性要查出来比如10万条数据,那么性能会很差,此时一般会采取用scoll滚动查询,一批一批的查,直到所有数据都查询完处理完 使用scoll滚动搜索,可以先搜索一批数据,然后下次再搜索一批数据,以 ...

  3. Servlet----------ServletConfig

    1. 什么是 ServletConfig servletConfig对象:用于封装servlet的配置信息.从一个servlet被实例化后,对任何客户端在任何时候访问有效,但仅对servlet自身有效 ...

  4. cxPivotGrid导出数据

    导出数据,需要在uses区域引用cxExportPivotGridLink 根据导出类型使用以下过程 procedure cxExportPivotGridToHTML procedure cxExp ...

  5. swiper 视频轮番

    百度搜索:swiper 视频轮番 转载1:https://blog.csdn.net/Aimee1608/article/details/79637929 项目中使用swiper插件嵌套video标签 ...

  6. WCG distribution of byteball

    https://steemit.com/byteball/@punqtured/processing-for-good-get-rewarded-for-crunching-numbers-to-cu ...

  7. PHP策略模式1

    [IUser.php] <?php /** * 策略模式 * 将一组特定的行为和算法封装成类,用来适应某些特定的上下文环境,实现从硬编码到解耦 * 应用举例:电商系统针对不同性别跳转到不同的商品 ...

  8. php循环方法实现先序、中序、后序遍历二叉树

    二叉树是每个节点最多有两个子树的树结构.通常子树被称作“左子树”(left subtree)和“右子树”(right subtree). <?php class Node { public $v ...

  9. Python 数据结构 链表

    什么是时间复杂度 时间频度:一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才知道.但是我们不可能也没有必要对每一个算法都进行上机测试,只需要知道那个算法花费的时间多,那个算法花费得 ...

  10. 5个Spark应用实例

    Spark简介: Spark是UC Berkeley AMP lab开发的一个集群计算的框架,类似于Hadoop,但有很多的区别.最大的优化是让计算任务的中间结果可以存储在内存中,不需要每次都写入HD ...