HDU 5728 - PowMod
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的更多相关文章
- 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. φ ...
- HDU 5278 PowMod 数论公式推导
题意:中文题自己看吧 分析:这题分两步 第一步:利用已知公式求出k: 第二步:求出k然后使用欧拉降幂公式即可,欧拉降幂公式不需要互质(第二步就是BZOJ3884原题了) 求k的话就需要构造了(引入官方 ...
- 徐州赛区网络预赛 D Easy Math
比赛快结束的适合看了一下D题,发现跟前几天刚刚做过的HDU 5728 PowMod几乎一模一样,当时特兴奋,结果一直到比赛结束都一直WA.回来仔细一琢磨才发现,PowMod这道题保证了n不含平方因子, ...
- HDU 4059 容斥原理+快速幂+逆元
E - The Boss on Mars Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64 ...
- HDU 5793 - A Boring Question
HDU 5793 - A Boring Question题意: 计算 ( ∑(0≤K1,K2...Km≤n )∏(1≤j<m) C[Kj, Kj+1] ) % 1000000007=? (C[ ...
- HDU 4633 Who's Aunt Zhang (Polya定理+快速幂)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4633 典型的Polya定理: 思路:根据Burnside引理,等价类个数等于所有的置换群中的不动点的个 ...
- HDU 6187 Destroy Walls (思维,最大生成树)
HDU 6187 Destroy Walls (思维,最大生成树) Destroy Walls *Time Limit: 8000/4000 MS (Java/Others) Memory Limit ...
- HDU 6143 - Killer Names | 2017 Multi-University Training Contest 8
/* HDU 6143 - Killer Names [ DP ] | 2017 Multi-University Training Contest 8 题意: m个字母组成两个长为n的序列,两序列中 ...
- HDU 6088 - Rikka with Rock-paper-scissors | 2017 Multi-University Training Contest 5
思路和任意模数FFT模板都来自 这里 看了一晚上那篇<再探快速傅里叶变换>还是懵得不行,可能水平还没到- - 只能先存个模板了,这题单模数NTT跑了5.9s,没敢写三模数NTT,可能姿势太 ...
随机推荐
- Centos6架设GIT服务,windows客户端使用TortoiseGit加载KEYGEN连接GIT服务器
前几天得空,想起前一阵学了GIT还没好好实践,就在虚拟机中安装测试了一下,并简单记录了CENTOS6中GIT安装,ssh-keygen生成,客户端使用TortoiseGit加载KEYGEN连接GIT服 ...
- OpenGL ES 2.0 shader开发
1.创建一个shader容器 GLES20.glCreateShader(shaderType); 函数原型为: int glCreateShader (int type) 方法参数: GLES20. ...
- (转) 新手入门:C/C++中的结构体
本文转载于 http://pcedu.pconline.com.cn/empolder/gj/c/0503/567930_all.html#content_page_1 所有程序经过本人验证,部分程序 ...
- UIScrollView和UIPageControl学习使用
# UIScrollView和UIPageControl # 概要 对于同一个页面需要展示很多图片信息.子视图等的这样的需求,我们可以采用控件UIScrollVIew,与之常常一起使用的控件是UIPa ...
- html验证码
一.原理 1.在webservice服务端,新建一个Bitmap对象,将验证码字符串.干扰线和干扰点绘制到此Bitmap上——>转换为字节数组——>Base64字符串 2.<img ...
- 加速ssh连接
今天aws大姨妈了,也不知道是aws问题还是gfw的问题,反正我都已经问候了你们zzsbd!!! ping aws的丢包都是75%以上,这还玩个雕啊,果断去找加速的教程来看,但是发现cygwin下并没 ...
- ipython的notebook
ipython是增强的python交互式shell.而notebook是在浏览器上运行ipython ubuntu下安装: sudo apt-get install ipython3 sudo apt ...
- GTW likes math(BC 1001)
GTW likes math Accepts: 472 Submissions: 2140 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 1 ...
- 凸包(hd1392)
Surround the Trees Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- Hibernate配置属性
Hibernate配置属性 属性名 用途 hibernate.dialect 一个Hibernate Dialect类名允许Hibernate针对特定的关系数据库生成优化的SQL. 取值 full.c ...