zoukankan      html  css  js  c++  java
  • 扩展欧几里得笔记

    扩欧求逆元~~

    若有$a$和$x$满足$ax≡1(mod p)$,则称$a$和$x$是在模$p$意义下的乘法逆元,此时在模$p$意义下乘以$x$相当于除以$x$。

    一个数有逆元的充要条件是$gcd(a,p)=1$,此时逆元唯一存在。

    给定$p$,要求$a$的逆元,相当于求解同余方程$ax≡1(mod p)$;

    容易转化为求解方程$ax-py=1$。

    所以就可以用解二元一次方程的解法,解出一组的解$x_{0}$,$y_{0}$,然后检验$gcd(a,p)$是否为1;

    注意到当$p$为质数的时候可以省略这一步;

    然后调整$x_{0}$到$0...m-1$的范围中就行了。

    没了?

    时间复杂度$O(nlogn)$

    代码:

     1 //求mod998244353意义下的逆元 
     2 #include<iostream>
     3 #include<cstring>
     4 #include<cstdio>
     5 #include<cmath>
     6 #define mod 998244353
     7 using namespace std;
     8 typedef long long ll;
     9 ll a;
    10 ll exgcd(ll a,ll b,ll &d,ll &x,ll &y){
    11     if(!b){
    12         d=a;
    13         x=1;
    14         y=0;
    15     }else{
    16         exgcd(b,a%b,d,y,x);
    17         y-=x*(a/b);
    18     }
    19 }
    20 ll getinv(int a,int p){
    21     ll d,x,y;
    22     exgcd(a,p,d,x,y);
    23     return (x+p)%p;
    24 }
    25 int main(){
    26     scanf("%lld",&a);
    27     printf("%lld",getinv(a,mod)); 
    28     return 0;
    29 }
  • 相关阅读:
    p(str or array) 传递数据以易于阅读的样式格式化后输出 bootstarp样式的打印函数
    [Err] 1067
    php 正则表达式
    Docker使用及dnmp构建
    记一次Ubuntu18.04升级到19.10的经历
    面试-Redis
    ubuntu截图软件deepin scrot
    docker 搭建 Hadoop
    Docker 遇到的坑
    RabbitMQ遇到的坑
  • 原文地址:https://www.cnblogs.com/dcdcbigbig/p/8966739.html
Copyright © 2011-2022 走看看