最主要的步骤是用 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 ;
}

最新文章

  1. UWP简单示例(二):快速开始你的3D编程
  2. 破解Outlook数据文件密码/PST访问密码
  3. 改变placeholder颜色
  4. Asset Store
  5. linux日志处理logrotate使用
  6. main函数的argc和argv
  7. (转)从Membership 到 .NET4.5 之 ASP.NET Identity
  8. MySQL(3):数据库操作
  9. js比较两个日期大小
  10. css设置滚动条颜色与样式以及如何去掉与隐藏滚动条
  11. C++待解
  12. Selenium1 Selenium2 WebDriver
  13. java 中 “文件” 和 “流” 的简单分析
  14. php+中文分词scws+sphinx+mysql打造千万级数据全文搜索
  15. restful架构风格设计准则(一)以资源为中心、自描述的请求响应、资源状态迁移为粒度
  16. python 去掉重复元素 学到再添加
  17. http://zaojiasys.jianshe99.com 建造师数据泄漏,可以查看全部所有人的信息!
  18. 关于使用vw单位适配H5项目(二)
  19. HttpServletRequest解决中文乱码的问题
  20. JUC线程池之 ThreadPoolExecutor简介

热门文章

  1. java中使用jdbc配置连接串时mysql 5.6与5.7版本“编码”参数有区别!
  2. 离线应用与客户端存储(cookie storage indexedDB)
  3. 【pyqtgraph绘图】线条,填充和颜色
  4. 浅谈KMP算法
  5. Python之路 day1 基础1 变量 for while 用户输入
  6. Windows 7中200M神秘隐藏分区
  7. 关于获取路径path
  8. vertical-align:middle实现图片与文字垂直居中对齐
  9. CentOS在VMware中 网络配置
  10. element后太侧边