对于大指数幂的处理

本文介绍了在编程比赛中处理大指数幂的方法,主要利用欧拉定理和费马小定理,当指数n为素数时,两者等价。通过示例解释了如何将大指数幂问题转化为快速幂运算来求解模意义下的结果。

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

对于大指数幂的处理

一点数论入门知识

打比赛的时候我们经常遇到一个特别大的指数,下面我讲一下通常的处理方式

首先用到一个定理:欧拉定理 这里写图片描述 a,p互质 或者他的简化形式 费马小定理 这里写图片描述 a,p互质

通常 n为素数所以两个定理是一样的。

示例 取 7^66666666! %1e9+7;

由费马小定理可知 7^1e9+6%1e9+7=1

所以 原式就变成了 7^(66666666!%1e9+6)%1e9+7,快速幂解决

#include <bits/stdc++.h> 
#include <chrono>
#include <windows.h>
using namespace std;      
typedef long long ll;
const ll mod=1e9+7;
///快速幂
ll fpow(ll a ,ll b){
    ll ans=1;
    while(b){
        if(b&1)
            ans=(ans*a)%mod;
        a*=a;
        a%=mod;
        b>>=1;
    }
    return ans;
}

int main() {
    ///也不算很暴力的 o(nlog(n))解法  44s(滑稽)
    ll f=7;
    for(int i=1;i<=66666666;i++){
        f=fpow(f,i);
    }
    cout<<f<<endl;
    ///  费马小定理解法 o(n)
    ll ans=1;
    for(int i=1;i<=66666666;i++){
        ans=(ans*i)%(mod-1);
    }
    cout<<fpow(7,ans);
    return 0;
}
///  来自滑稽的问候
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值