0
点赞
收藏
分享

微信扫一扫

题8:特殊的同余方程-逆元

ixiaoyang8 2022-03-19 阅读 87

模的逆元

同余方程ax = 1 (mod n ),gcd(a,n)= 1时有解。这时称求出的x为a的对模n的乘法逆元。
对于同余方程ax = 1(mod n ) , gcd(a,n)= 1的求解就是求解方程ax+ ny= 1,x,y为整数。这个可用扩展欧几里德算法求出,原同余方程的唯─解就是用扩展欧几里德算法得出的x
 

package 数学问题;

import java.util.Scanner;

public class case07_特殊同余方程逆元 {
    static long x;
    static long y;
    public static long ext_gcd(long a,long b){
        if(b==0){
            x=1;
            y=0;
            return a;
        }
        long res=ext_gcd(b,a%b);
        //xy已经被下一层递归更新了
        long x1=x;//备份
        x=y;
        y=x1-a/b*y;
        return res;
    }
    //线性方程
    public static long linearEquation(long a,long b,long m) throws Exception{
        long d=ext_gcd(a,b);
        if(m%d!=0) throw new Exception("无解");
        long n=m/d;
        x*=n;
        y*=n;
        return d;
    }
    //逆元
    public static void inverseElement(long a,long mo){
        try {
            linearEquation(a, mo, 1);
            x = (x % mo + mo) %mo;
            System.out.println(x);
        }catch (Exception e){
            System.out.println("无解");
        }
    }

    public static void main(String[] args) throws Exception {
        case07_特殊同余方程逆元 a=new case07_特殊同余方程逆元();
        Scanner sc=new Scanner(System.in);
        long n=sc.nextInt();
        long mo=sc.nextInt();
        try {
            a.inverseElement(n,mo);
            //System.out.println(a.x);
        }catch (Exception e){
            System.out.println("无解");
        }
    }
}
举报

相关推荐

0 条评论