首页 > 编程语言 >中国剩余定理(一次同余问题) Java

中国剩余定理(一次同余问题) Java

时间:2024-09-27 15:34:44浏览次数:1  
标签:Java gcd int 定理 xy result prod public 同余

/**
 * 中国剩余定理
 */
public class ChineseRemainderTheorem {
    
    // 扩展欧几里得算法,返回gcd(a, b)以及x, y使得ax + by = gcd(a, b)
    public static int extendedGCD(int a, int b, int[] xy) {
        if (b == 0) {
            xy[0] = 1;
            xy[1] = 0;
            return a;
        }
        int gcd = extendedGCD(b, a % b, xy);
        int temp = xy[0];
        xy[0] = xy[1];
        xy[1] = temp - (a / b) * xy[1];
        return gcd;
    }

    // 使用中国剩余定理求解同余方程组
    public static int chineseRemainder(int[] n, int[] a) {
        int prod = 1; // 模数乘积
        for (int i = 0; i < n.length; i++) {
            prod *= n[i];
        }

        int result = 0;
        for (int i = 0; i < n.length; i++) {
            int p = prod / n[i];
            int[] xy = new int[2];
            extendedGCD(p, n[i], xy); // 求解p * x ≡ 1 (mod n[i])
            int inverse = xy[0];
            result += a[i] * inverse * p;
        }

        return (result % prod + prod) % prod; // 保证结果为正数
    }

    public static void main(String[] args) {
        // 定义模数数组和余数数组
        int[] n = {3, 5, 7};
        int[] a = {2, 3, 2};

        // 使用中国剩余定理求解
        int result = chineseRemainder(n, a);
        System.out.println("结果是: " + result);
    }
}

标签:Java,gcd,int,定理,xy,result,prod,public,同余
From: https://www.cnblogs.com/zhao-zong-yu-hai/p/18435865

相关文章

  • java+vue计算机毕设编程类题目在线评测系统【源码+程序+论文+开题】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展和在线教育的普及,编程教育已成为培养未来科技人才的重要基石。然而,传统的编程教学模式往往受限于时间和空间的限制,难以高效、......
  • java+vue计算机毕设病患互助平台【源码+程序+论文+开题】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在当今社会,随着医疗技术的不断进步和人们健康意识的提升,病患群体对于医疗资源的获取与共享需求日益增长。然而,面对复杂的疾病谱系和有限的医疗资源,许......
  • java+vue计算机毕设邦友茶行茶叶销售管理【源码+程序+论文+开题】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着人们生活水平的日益提高,茶文化作为中国传统文化的重要组成部分,正逐渐在现代社会中焕发新的生机与活力。邦友茶行,作为一家致力于传承与创新茶叶文......
  • Java设计模式5 - 原型模式
    原型模式原型模式属于对象的创建模式,通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象,这就是原型模式的用意。 原型模式结构原型模式要求对象实现一个可以克隆机身的接口,这样就可以通过复制一个实例对象本身来创建一个新的实例......
  • java的基础入门学习03——抽象类与抽象方法的使用
    文章目录前言1、抽象类1.1什么是抽象类1.2如何使用抽象类2、抽象方法2.1什么是抽象方法2.2抽象方法的使用3、运用实例前言首先在学习抽象类以及抽象方法之前,我们得先了解什么是抽象,抽象其实也被成为面向对象的第四大特征,abstract就是java中对应的关键字,抽象往......
  • java的基础入门学习02-面向对象特性及使用
    文章目录前言面向对象1、什么是面向对象2、面向对象的三大特性2.1封装特性2.2继承特性2.3多态特性前言java中经常会把需要使用到的数据结构来封装成对象,而当我们这些后来希望使用前辈留下来的代码或者自己拓展功能供大家借鉴使用,面向对象是学习java中十分重要的......
  • 给Java同仁单点的AI"开胃菜"--搭建一个自己的本地问答系统
    这是我参与创作者计划的第1篇文章大家好,因为对AI大模型很感兴趣,相信很多兄弟们跟我一样,所以最近花时间了解了一些,有一些总结分享给大家,希望对各位有所帮助;本文主要是目标是讲解如何在本地搭建一个简易的AI问答系统,主要用java来实现,也有一些简单的python知识;网上很多例子都......
  • 【Java】【SpringBoot】SpringBoot整合MybatisPlus(快速入门)
    较早之前,写了SpringBoot整合Mybatis:https://www.cnblogs.com/luyj00436/p/16701894.html。这个数据库的链接有过时。Mybatisplus是mybatis的增强工具。对比Mybatis功能强大、易于使用。对于复杂业务,需要连接多张表单,Mybatisplus不够灵活,隐藏了代码,也不能更好地调试;对于简单业务......
  • 基于Java的学生档案管理系统
    基于springboot+vue实现的学生档案管理系统 (源码+L文+ppt)4-065  第4章系统设计   4.1总体功能设计学生档案管理系统的总体功能设计包括学生信息管理、课程管理、教师信息管理、成绩管理和系统配置管理。系统将提供用户友好的界面,支持学生信息的录入、查询和......
  • 【Java】【Idea】MyBatisPlusX 的使用
    1.安装MybatisPlusX插件 2.连接数据库 3.右击,选择“MybatisX-Generator”。 4.生成设置。  ......