zoukankan      html  css  js  c++  java
  • 大数取模 快速幂 欧拉定理 欧拉函数

    求a^b%mod a<=1e12 b<=1e100000 mod=1e9+7

    已知欧拉定理 a^φ(n) ≡1%n(a与n互质)

    b%φ(n)=t

    b=k*φ(n)+t(k=0,1,2,3...)

    a^b%mod=a^(K*φ(n)+t)%mod=(a^(k*φ(n))%mod)*a^t%mod)%mod=a^t%mod
    (a^φ(n) ≡1%n=1, a^(k*a^φ(n) )=1;原式=(1*a^t)%mod )
    用欧拉函数求出φ(n) b对φ(n)取模即可求出t
    a^b%mod=a^t%mod;
    欧拉函数:
     1 ll euler(ll n){ //返回euler(n)   
     2      ll res=n,a=n;  
     3      for(ll i=2;i*i<=a;i++){  
     4          if(a%i==0){  
     5              res=res/i*(i-1);//先进行除法是为了防止中间数据的溢出   
     6              while(a%i==0) a/=i;  
     7          }  
     8      }  
     9      if(a>1) res=res/a*(a-1);  
    10      return res;  
    11 }  

    快速幂:

     1 ll PowerMod(ll a, ll b, ll mod){
     2     ll ans=1;
     3     a%=mod;
     4     while(b){
     5         if(b&1) ans=(ans*a)%mod;
     6         b>>=1;
     7         a=(a*a)%mod;
     8     }
     9     return ans;
    10 }

    大数取模:

    1 ll MOD(char *s,ll m){
    2     ll len = strlen(s);
    3     ll ans = 0;
    4     for(ll i = 0; i < len; i++)
    5         ans = (( ans*10 + s[i] - '0') % m);
    6     return ans;
    7 }
  • 相关阅读:
    进程同步&&进程互斥
    CHAP4 字符串和格式化输入输出
    记录学习到的内容
    数据链路层 差错控制
    二叉树的顺序存储
    Java复习笔记
    Stream流
    函数式接口
    网络编程
    接口,多态,抽象类总结
  • 原文地址:https://www.cnblogs.com/max88888888/p/6094831.html
Copyright © 2011-2022 走看看