欧拉定理以及欧拉降幂

大数幂运算   指数太大的时候  我们需要进行降幂操作

首先呢 认识欧拉定理之前 先了解一下欧拉函数      链接     欧拉函数

欧拉定理

我们将欧拉函数写作    

欧拉定理就是  a n为正整数 且 a  n  互质   那么 (mod  n)

那么根据欧拉定理的式子  我们可以转化为  %n 1  

那么既然 在mod n的情况下  恒等于 1  

那么就得到了我们用来降幂的公式     (mod n)

扩展欧拉定理

扩展呢就是把互质推广到所有情况嘛
如果欧拉定理中的 a n不互质了  则有如下公式

降幂

如果a n互质  我们就根据欧拉定理降幂

                 (mod n)

如果不互质   我们就根据扩展欧拉定理降幂

                  我们在求 % n  的时候 可以通过判断  来转成上面的两个式子之一

就完成降幂了

练习题目的话

牛客寒假算法基础集训营4 E题

代码

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
typedef long long ll;
const int maxn=1e6+7;
const int mod=1e9+7;
char a[maxn],b[maxn];
ll pow_mod(ll x,ll n){
    ll ans=1;
    x=x%mod;
    while(n!=0){
        if(n&1)
            ans=ans*x%mod;
        n>>=1;
        x=x*x%mod;
    }
    return ans;
}
int main(){
    //先通过欧拉函数 计算出mod 的欧拉函数是 1000000006 也就是mod-1
    scanf("%s%s",a,b);
    int l=strlen(a);
    ll n=0;
    for(int i=0;i<l;i++){
        n=(n*10+a[i]-'0')%(mod-1);//所以这里使用 mod-1 降幂
    }
    printf("%lld\n",pow_mod(2,n));
    return 0;
}

 

 

 

 

 

 

 

全部评论

相关推荐

好想摆:一想到我苦苦追求的迪子私下里却是985的马子,我的心就在滴血😭😭😭
点赞 评论 收藏
分享
06-23 11:43
门头沟学院 Java
allin校招的烤冷...:我靠,今天中午我也是这个hr隔一个星期发消息给我。问的问题还是一模一样的😅
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务