HDU 6189 Law of Commutation(数论)

本文探讨了特定条件下模指数运算的性质及应用,针对给定的整数a和n,通过分析a^b ≡ b^a (mod 2^n) 的解的情况,提出了解题的有效算法。文章首先讨论了a为奇数时解的存在性和唯一性,并进一步分析了a为偶数时解的数量,提供了一个实用的C++代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Description

给出两正整数a,na,n,令m=2nm=2n,对于任意b[1,m]b∈[1,m],求满足abba(mod m)ab≡ba(mod m)bb的个数

Input

多组用例,每组用例输入两正整数n,a(1n30,1a109)

Output

对于每组用例,输出满足方程的bb的个数

Sample Input

2 3
2 2

Sample Output

1
2

Solution

a为奇数,则ab mod mab mod m为奇数,若bb为偶数,则ba mod m为偶数,矛盾,故bb为奇数

对于一个奇数x=2k+1x2=4k2+4k+1=4k(k+1)+1x2=4k2+4k+1=4k(k+1)+1,进而x21(mod 23)x2≡1(mod 23)x2=8k+1x2=8k+1x4=(8k+1)2=64k2+16k+1x4=(8k+1)2=64k2+16k+1,进而x41(mod 24)x4≡1(mod 24),以此类推有x2y1(mod 2y+2)x2y≡1(mod 2y+2)

aba(mod 23),bab(mod 23)ab≡a(mod 23),ba≡b(mod 23)ab(mod 23)a≡b(mod 23)

abab%4(mod 24),baba%4(mod 24)ab≡ab%4(mod 24),ba≡ba%4(mod 24),且a%4=b%4a%4=b%4,故有ab(mod 24)a≡b(mod 24)

(b,24)=1(b,24)=1,故bb在模24意义下有逆元b1b−1,进而有(ab1)x1(mod 24)(ab−1)x≡1(mod 24),其中x=a%4x=a%4为奇数,由于x/|ϕ(24)=23x⧸|ϕ(24)=23,故有ab11(mod 24)ab−1≡1(mod 24),即ab(mod 24)a≡b(mod 24)

以此类推得ab(mod 2n)a≡b(mod 2n),即b=a%mb=a%m,这说明解至多一个,而显然aaaa(mod m)aa≡aa(mod m),故解唯一

aa为偶数,同理可证明b为偶数,由于ab2b(a2)b(mod 2n)ab≡2b⋅(a2)b(mod 2n),故当b>nb>n时,ab0(mod 2n)ab≡0(mod 2n),进而ba0(mod 2n)ba≡0(mod 2n),对于任意b[1,m]b∈[1,m],将bb表示为b=c2x,其中cc为奇数,那么有2ax0(mod 2n),此式等价于axnax≥n,故xnax≥⌈na⌉,令x=nax=⌈na⌉,此时区间(n,m](n,m]内满足2x|b2x|bbb(m>>x)(n>>x)个,当bnb≤n时,由于n30n≤30,暴力枚举bb判方程是否成立即可

Code

#include<cstdio>
using namespace std;
typedef long long ll;
int mod_pow(int a,int b,int c)
{
    int ans=1;
    while(b)
    {
        if(b&1)ans=(ll)ans*a%c;
        a=(ll)a*a%c;
        b>>=1;
    }
    return ans;
}
int main()
{
    int n,a;
    while(~scanf("%d%d",&n,&a))
    {
        int m=1<<n;
        if(a&1)printf("1\n");
        else
        {
            int ans=0;
            for(int b=2;b<=n;b+=2)
                if(mod_pow(a,b,m)==mod_pow(b,a,m))ans++;
            int x=(n+a-1)/a;
            ans+=(m>>x)-(n>>x);
            printf("%d\n",ans);
        }
    }
    return 0;
}
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值