Exponial

题目

http://exam.upc.edu.cn/problem.php?cid=1512&pid=4

欧拉降幂定理:当b>phi(p)时,有a^b%p = a^(b%phi(p)+phi(p))%p

这题做的难受....看到题目我就猜到肯定用到欧拉降幂,然后就毫无目的地找规律。然后发现不同地取欧拉函数会变成0,然后内心毫无波动.....可能不怎么会递归

思路:当n>=6时,欧拉降幂定理一定适用,因为f(5)>1e9,也就是一定有欧拉降幂定理的b>phi(p)这个条件,所以f(n)%p=nf(n-1)%p=n(f(n-1)%phi(p)+phi(p))%p;再递归地求f(n-1)%phi(p)

当n<=5时,f(n)%p=n^f(n-1)%p,因为不一定有f(n-1)>phi(p)成立,所以不能用欧拉降幂定理求,直接手动求出f(n)%p即可;

从1e9递归到5很慢,但当p=1时,可以直接返回f(n)%p=0而不用递归到下一层;

AC代码:

#include <cstdio>
typedef long long ll; ll phi(ll x){
ll res=x;
for(ll i=2; i*i<=x; ++i){
if(x%i==0){
res=res-res/i;
while(x%i==0)x/=i;
}
}
if(x>1)
res=res-res/x;
return res;
}
ll qpow(ll a,ll n,ll mod){
ll res=1;
while(n){
if(n&1){
res*=a;
res%=mod;
}
n>>=1;
a=(a*a)%mod;
}
return res;
}
ll solve(ll n,ll m)
{
if(m==1) return 0;
if(n==1) return 1;
else if(n==2) return 2%m;
else if(n==3) return 9%m;
else if(n==4) return qpow(4,9,m);
ll tem=phi(m);
return qpow(n,solve(n-1,tem)+tem,m);
}
int main()
{
//printf("%lld\n",phi(1000000));
ll n,m;
while(scanf("%lld%lld",&n,&m)!=EOF){
printf("%lld\n",solve(n,m));
}
return 0;
}

好久没写博客.....自己太菜要努力鸭

[数学][欧拉降幂定理]Exponial的更多相关文章

  1. CodeForces - 906D Power Tower(欧拉降幂定理)

    Power Tower CodeForces - 906D 题目大意:有N个数字,然后给你q个区间,要你求每一个区间中所有的数字从左到右依次垒起来的次方的幂对m取模之后的数字是多少. 用到一个新知识, ...

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

  3. 欧拉降幂,基本计算定理——cf615D

    用基本算数定理求约数和的思想来计算, 首先用pi,ci来表示第i个质数,指数为i,然后对于每个pi,pi^2...都有指数为mul{(c_1+1)(c_2+1)(c_i-1+1)(c_i+1+1).. ...

  4. 数学--数论--欧拉降幂--P5091 欧拉定理

    题目背景 出题人也想写有趣的题面,可惜并没有能力. 题目描述 给你三个正整数,a,m,ba,m,ba,m,b,你需要求:ab mod ma^b \bmod mabmodm 输入格式 一行三个整数,a, ...

  5. TOJ 3151: H1N1's Problem(欧拉降幂)

    传送门:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=3151 时间限制(普通/Java): ...

  6. HDU4704(SummerTrainingDay04-A 欧拉降幂公式)

    Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submi ...

  7. 2019计蒜之道初赛3 D. 阿里巴巴协助征战SARS(困难)(大数取余+欧拉降幂)

    阿里巴巴协助征战SARS(困难) 33.29% 1000ms 262144K   目前,SARS 病毒的研究在世界范围内进行,经科学家研究发现,该病毒及其变种的 DNA 的一条单链中,胞嘧啶.腺嘧啶均 ...

  8. HDU - 4704 sum 大数取余+欧拉降幂

    Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submi ...

  9. ACM-数论-广义欧拉降幂

    https://www.cnblogs.com/31415926535x/p/11447033.html 曾今一时的懒,造就今日的泪 记得半年前去武大参加的省赛,当时的A题就是一个广义欧拉降幂的板子题 ...

随机推荐

  1. C# 直接使用sql语句对数据库操作 (cmd.ExecuteNonQuery)

    只介绍读和删 不管使用什么方法来对数据库进行操作都绕不开和数据库的连接问题,所以咱们先在App.config中添加连接字段 <connectionStrings> <add name ...

  2. Java中多态的实例

    public class cf { /** * 实际上这里涉及方法调用的优先问题, * 优先级由高到低依次为:this.show(O).super.show(O).this.show((super)O ...

  3. i春秋-web-爆破3

    首先,是PHP代码审计,看懂就能解出来题. <?php error_reporting(0); session_start(); require('./flag.php'); if(!isset ...

  4. 一文说透 Spring 循环依赖问题

    https://zhuanlan.zhihu.com/p/62382615 循环依赖发生的时机 Bean 实例化主要分为三步,如图: 问题出现在:第一步和第二步的过程中,也就是填充属性 / 方法的过程 ...

  5. python *args 和 ** kwargs

    可变长度的参数 *args的使用方法 *args 用来将参数打包成tuple给函数体调用 可见,1这个参数,被打包成了一个元组 def func(*args): print(args,type(arg ...

  6. setoolkit+花生壳 制作钓鱼网站

    国家法律一定要遵守,知识要用在对的地方. 本贴只为了和大家交流学习,请勿用在其他地方,损害任何人的利益. 今天我,来说一下钓鱼网站 (在kali) 我们选择  1  回车 再选择 2 回车 再选择3 ...

  7. CTF -攻防世界-web新手区

    直接f12出来 先用get后加/?a=1 然后火狐装hackbar(老版本)f12 post b=2 搞定 Hackbar:https://github.com/Mr-xn/hackbar2.1.3 ...

  8. 7.3 使用while 循环来处理列表和字典

    # 7.3.1 在列表之间移动元素 # confirmed_users.py # 首先,创建一个待验证用户列表 # 和一个用于存储已验证用户的空列表 uncomfirmed_users = ['jam ...

  9. Windows 远程桌面连接 CentOS7 (xrdp)

    Windows 远程桌面连接 CentOS7 (xrdp) 前提: CentOS安装桌面,如果无桌面,请执行: yum -y groups install "GNOME Desktop&qu ...

  10. 技术沙龙|京东云区块链进校园-京东云&深圳大学线下沙龙分享回顾

    在刚刚结束的京东云&深圳大学技术沙龙活动中,多位京东云的技术大咖针对京东云BDS产品技术细节.开源计划,与深圳大学的同学和参会者进行了深入探讨,干货满满反响深刻,获得了在场同学与参会者的一致好 ...