洛谷P2842 LJJ算数 解题报告

LJJ算数

P2842


技术统计

难度 提高+/省选-

用时 一晚上+早上20min

提交次数 1

unaccept 次数 0

ac次数 1


题意概括

我们定义 a # b = a a a a … a \# b=a^{a^{a^{a\ldots}}} a#b=aaaa
求a#b%(1e9+7)的值

数据范围

1 ≤ a , b ≤ 1 0 16 1\le a,b\le 10^{16} 1a,b1016



解法、

知识点

  1. 费马小定理
  2. 快速幂

解法概括

首先补充有关同余符号的运算

已知 a ≡ b ( m o d    x ) ; c , d ∈ N + ; y ∈ N + a\equiv b(\mod x);c,d \in N^+;y \in N^+ ab(modx);c,dN+;yN+

那么有

a ± c ≡ b ± c a \pm c \equiv b \pm c a±cb±c

a ± b y ≡ b ± a y a \pm by \equiv b\pm ay a±byb±ay

a ± c x ≡ b ± d y a \pm cx \equiv b \pm dy a±cxb±dy


证明:

由费马小定理得 a p ≡ a , p 为 质 数 a^p \equiv a,p为质数 apa,p

∵ a p ≡ a , \because a^p \equiv a, apa,

∀ k ∈ N + \forall k\in N^+ kN+

∴ a p − 1 m o d    p − 1 = 1 m o d    p \therefore a^{p-1} \mod {p-1}=1 \mod p ap1modp1=1modp

a k m o d    p × a p − 1 = 1 m o d    p × a k m o d    p a^k \mod p \times a^{p-1}=1 \mod p \times a^k \mod p akmodp×ap1=1modp×akmodp

移项得

a k ≡ a k a p − 1 = a k − ( p − 1 ) ( a k m o d    p = a k − ( p − 1 ) m o d    p ) a^k\equiv \frac{a^k}{a^{p-1}}=a^{k-(p-1)}(a^k \mod p=a^{k-(p-1)} \mod p) akap1ak=ak(p1)(akmodp=ak(p1)modp)

我们考虑 a # b a\#b a#b

对于 a a a a … [ 1 式 ] a^{a^{a^{a\ldots}}}[1式] aaaa[1]

1式 = a a b − 1 =a^{a^{b-1}} =aab1(手推一下就知道了)

update: 鉴于有童鞋问我这里是如何得到的我们在这里更新一下上式的推导过程

a a a a^{a^a} aaa

= ( a × a × a × ⋯ × a ) a ( a 个 ) =(a \times a\times a\times \cdots \times a)^a(a个) =(a×a×a××a)a(a)

= a a × a a × a a ⋯ × a a ( a 个 ) =a^a \times a^a \times a^a \cdots \times a^a(a个) =aa×aa×aa×aa(a)

= a × a × a × a ⋯ × a ( a 2 个 ) =a \times a\times a\times a \cdots \times a(a^2个) =a×a×a×a×a(a2)

由此递推可知

a a b − 1 ≡ a a b − 1 m o d    ( p − 1 ) ( m o d    p ) a^{a^{b-1}} \equiv a^{a^{b-1}\mod(p-1)}(\mod p) aab1aab1mod(p1)(modp)

我们来证明上式是正确性

假设 k > p k>p k>p(不然模p也没什么意思)

那么存在 n n n使得

a m = a n ( p − 1 ) × a m m o d    ( p − 1 ) a^m =a^{n(p-1) }\times a^{m\mod(p-1)} am=an(p1)×ammod(p1)

根据费马小定理得

a m ≡ a m m o d    ( p − 1 ) a^m\equiv a^{m\mod(p-1)} amammod(p1)

∴ \therefore a b − 1 = m a^{b-1}=m ab1=m

a a b − 1 ≡ a a b − 1 m o d    ( p − 1 ) ( m o d    p ) a^{a^{b-1}} \equiv a^{a^{b-1}\mod(p-1)}(\mod p) aab1aab1mod(p1)(modp)

坑点

1.一定要开long long
2. 快速幂最好用位运算

代码实现

#include<cstdio>
#define ll long long
const ll mod=1e9+7;
ll n,m;
ll qpow(ll a,ll b,ll mod)
{
    ll res=1,base=a;
    while(b)
    {
        if(b&1)res=(res%mod)*(base%mod)%mod;
        base=(base%mod)*(base%mod)%mod;
        b>>=1;
    }
    return res%mod;
}
int main()
{
    scanf("%lld%lld",&n,&m);
    printf("%lld",qpow(n,qpow(n,m-1,mod-1),mod));
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值