洛谷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
#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;
}


你可能感兴趣的:(刷题)