HDU 5728 - PowMod

题意:
    定义: k = ∑(i=1,m) φ(i∗n) mod 1000000007

给出: n,m,p ,且 n 无平方因子

求: ans= k^(k^(k...k)) mod p  (k有无限个)
    
分析:

欧拉函数 + 指数循环节
    
    第一部分 求出 k.
          定理: 1.欧拉函数是非完全积性函数: φ(m*n) = φ(n)*φ(m) , 当且仅当GCD(n,m) = 1.
          应用:
              ∑(i=1,m)φ(i*n) = φ(pi) * ∑(i=1,m)φ(i*n/pi) + ∑(i=1,m/pi)φ(i*n) ; (n无平方因子数) ,可自行推导
    第二部分
          应用指数循环节化无限为有限,具体实现为递归操作
        
         指数循环节: A^x = A^(x % φ(C) + φ(C)) (mod C)  (x >= φ(C))

 #include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int MOD= ;
const int MAXN=1e7;
int euler[MAXN+];
long long sum[MAXN+];
long long k,n,m,p;
void GetEuler()
{
memset(euler,,sizeof(euler));
euler[]=;
for(int i = ;i <= MAXN;i++)
if(!euler[i])
for(int j = i;j <= MAXN;j += i)
{
if(!euler[j]) euler[j]=j;
euler[j] = euler[j] / i * (i-);
}
sum[]=;
for(int i = ;i <=MAXN; i++)
sum[i] = (sum[i-] + euler[i]) % MOD;
}
long long Get_K(long long n,long long m)
{
if(m==) return ;
if(m==) return euler[n];
if(n==) return sum[m];
if(euler[n]==n-) return (euler[n]*Get_K(,m)%MOD + Get_K(n,m/n))%MOD;
for(int i=;i<MAXN;i++)
if(n%i==)
return (euler[i] * Get_K(n/i,m)%MOD + Get_K(n,m/i) ) % MOD;
}
long long PowMod(long long a,long long b, long long mod)
{
long long r = ;
while(b)
{
if(b&) r = (r*a)%mod;
a= (a*a)%mod;
b>>=;
}
return r;
}
long long Cal(long long k, long long p)
{
if( p == ) return k&;//mod φ(p)
return PowMod(k,Cal(k,euler[p])+euler[p],p);//递归的计算ans,递归出口为φ(p)=1
}
int main()
{
GetEuler();
while(~scanf("%lld%lld%lld",&n,&m,&p))
{
k = Get_K(n,m);
printf("%lld\n",Cal(k,p));
}
}
/*
欧拉函数:
对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目。 例如euler(8)=4,因为1,3,5,7均和8互质。 通式:
对于一个正整数N的素数幂分解 N = (P1^q1) * (P2^q2) * ...* (Pn^qn).
φ(1) = 1.
φ(N) = N * (1-1/P1) * (1-1/P2) *...* (1-1/Pn). 定理:
1.欧拉函数是非完全积性函数: φ(m*n) = φ(n)*φ(m) , 当且仅当GCD(n,m) = 1. 2.一个数的所有质因子之和是 euler(n)*n/2. 3.若n是素数p的k次幂,φ(n)=p^k-p^(k-1)=(p-1)p^(k-1),因为除了p的倍数外,其他数都跟n互质. 特殊性质:
1.当n为奇数时,φ(2n) = φ(n).
2.对于质数p,φ(p) = p - 1
3.除了N=2,φ(N)都是偶数. 指数循环节:
A^x = A^(x % φ(C) + φ(C)) (mod C) (x >= φ(C)) 定理1 应用:
∑(i=1,m)φ(i*n) = φ(pi) * ∑(i=1,m)φ(i*n/pi) + ∑(i=1,m/pi)φ(i*n) ; (n无平方因子数) */

HDU 5728 - PowMod的更多相关文章

  1. HDU - 5728:PowMod (欧拉函数&指数循环节)

    Declare: k=∑ m i=1 φ(i∗n) mod 1000000007 k=∑i=1mφ(i∗n) mod 1000000007 n n is a square-free number. φ ...

  2. HDU 5278 PowMod 数论公式推导

    题意:中文题自己看吧 分析:这题分两步 第一步:利用已知公式求出k: 第二步:求出k然后使用欧拉降幂公式即可,欧拉降幂公式不需要互质(第二步就是BZOJ3884原题了) 求k的话就需要构造了(引入官方 ...

  3. 徐州赛区网络预赛 D Easy Math

    比赛快结束的适合看了一下D题,发现跟前几天刚刚做过的HDU 5728 PowMod几乎一模一样,当时特兴奋,结果一直到比赛结束都一直WA.回来仔细一琢磨才发现,PowMod这道题保证了n不含平方因子, ...

  4. HDU 4059 容斥原理+快速幂+逆元

    E - The Boss on Mars Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64 ...

  5. HDU 5793 - A Boring Question

    HDU 5793 - A Boring Question题意: 计算 ( ∑(0≤K1,K2...Km≤n )∏(1≤j<m) C[Kj, Kj+1]  ) % 1000000007=? (C[ ...

  6. HDU 4633 Who's Aunt Zhang (Polya定理+快速幂)

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4633 典型的Polya定理: 思路:根据Burnside引理,等价类个数等于所有的置换群中的不动点的个 ...

  7. HDU 6187 Destroy Walls (思维,最大生成树)

    HDU 6187 Destroy Walls (思维,最大生成树) Destroy Walls *Time Limit: 8000/4000 MS (Java/Others) Memory Limit ...

  8. HDU 6143 - Killer Names | 2017 Multi-University Training Contest 8

    /* HDU 6143 - Killer Names [ DP ] | 2017 Multi-University Training Contest 8 题意: m个字母组成两个长为n的序列,两序列中 ...

  9. HDU 6088 - Rikka with Rock-paper-scissors | 2017 Multi-University Training Contest 5

    思路和任意模数FFT模板都来自 这里 看了一晚上那篇<再探快速傅里叶变换>还是懵得不行,可能水平还没到- - 只能先存个模板了,这题单模数NTT跑了5.9s,没敢写三模数NTT,可能姿势太 ...

随机推荐

  1. sqlserver 执行远程数据库代码

    1.启用Ad Hoc Distributed Queries: exec sp_configure 'show advanced options',1reconfigureexec sp_config ...

  2. HDU 5735 - Born Slippy

    题意: 一棵 n 个节点的根树,i 节点权重 wi 对每一个节点s,找到这样一个长 m 的标号序列 v : 1. vi是vi-1 的祖先 2. f[s] = w[vi] + ∑(i=2, m) (w[ ...

  3. Array类型(二)

    1.concat()方法可以基于当前数组中的所有项创建一个新数组. 先创建当前数组的一个副本,然后将接收到的参数添加到这个副本的末尾,最后返回新构建的数组. var colors = ["r ...

  4. MongoDB监控一 mongostat

    mongostat命令                                                               mongostat可以提供mongod和mongos ...

  5. php 中const和 define的区别

    在php中定义常量时,可用到const与define这两种方法,那他们到底有什么区别呢? 1.const用于类成员变量的定义,一经定义,不可修改.define不可用于类成员变量的定义,可用于全局常量. ...

  6. 使用ARM模板部署自动扩展的Linux VMSS(2)

    12.准备完了模板文件,我们使用Powershell来创建VMSS for Linux的自动扩展集合,首先登陆到Azure中国的ARM账号: Login-AzureRmAccount -Environ ...

  7. JS中各种宽度、高度、位置、距离总结

    1.window.screen 浏览器与屏幕的距离,screenX(screenLeft),screenY(screenTop) 2.window.scrollTo(x,y) 将纵向滚动条移动到相对于 ...

  8. python模范发送邮件的时候,才smtp.connect的时候总是抛出错误

    python发送邮件的时候,总是出现:[Errno 10060] 错误码 根据debug得到在connect的时候出错. 认真检查了下host,没有错呀~应该就是服务器的host. 查看了下网上的一些 ...

  9. ArcGis API FOR Silverlight 做了个导航工具~

    原文 http://www.cnblogs.com/thinkaspx/archive/2012/08/08/2628214.html 转载请注明文章出处:http://www.cnblogs.com ...

  10. css案例学习之按钮超链接

    效果 css实现 <html> <head> <title>按钮超链接</title> <style> a{ /* 统一设置所有样式 */ ...