算法——数论——同余

目录

同余

一、试题 算法训练 同余方程


同余

  • 同余使人们能够用等式的形式简洁地描述整除关系
  • 同余:若 m(正整数),a 和 b 是整数,a%m==b%m,或(a-b)%m==0,记为  b(mod m)
  • 求解一元线性同余方程等价于求解二元线性丢番图方程  
    • 一元线性同余方程 ax\equiv b(mod m),解法看下面第一题
    • 二元线性丢番图方程 ax+my=b
  • 逆:ax\equiv 1(mod m)的一个解为 a 模 m 的逆

一、试题 算法训练 同余方程

问题描述

  求关于x的同余方程ax ≡ 1 (mod b)的最小正整数解。

输入格式

  输入只有一行,包含两个正整数ab,用一个空格隔开。

输出格式

  输出只有一行,包含一个正整数x0,即最小正整数解。输入数据保证一定有解。

样例输入

3 10

样例输出

7

数据规模和约定

  对于40%的数据,2 ≤b≤ 1,000;
  对于60%的数据,2 ≤b≤ 50,000,000;
  对于100%的数据,2 ≤ab≤ 2,000,000,000。

 

 分析:

  • 这行代码 (x % b + b) % b 的目的是确保最终的结果落在 0 到 b-1 的范围内,即取余操作的结果始终为非负数。

    首先,我们知道 % 运算符返回的结果可能是负数,具体取决于被除数和除数的正负性。为了保证结果始终为非负数,我们首先对 x 求模 b,得到一个值在 -b+1 到 b-1 之间的数。然后,我们加上 b,这样就可以确保结果大于等于 0 且小于 2b。最后再次对 b 取模,使结果落在 0 到 b-1 的范围内。

    这样的处理方式可以确保得到正确的最小正整数解,同时保证结果在合理的范围内。

package no1_1;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);long a = scanner.nextInt();long b = scanner.nextInt();System.out.println(modInverse(a, b));}//求a模b的逆,即为同余方程的一个解public static long modInverse(long a, long b) {//求逆long[] result = new long[2];extendGcd(a, b, result);//扩展欧几里得算法求ax+by=1的一个特解result[0]long x = result[0];return (x % b + b) % b;//保证返回最小正整数}public static long extendGcd(long a, long b, long[] result) {if (b == 0) {result[0] = 1;result[1] = 0;return a;}long[] temp = new long[2];long d = extendGcd(b, a % b, temp);result[0] = temp[1];result[1] = temp[0] - a / b * temp[1];return d;}
}

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/687110.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决ubuntu登录密码问题

解决ubuntu登录密码问题 不要随便删除密码,不要随便改密码,很容导致密码过期,或者密码无效。参考了很多人的做法,都没有得到解决。下面的过程,够详细了,我就是这么搞好的。 1、重启虚拟机,不停…

Texas Instruments 在 GitHub 的官方主页

Texas Instruments 在 GitHub 的官方主页 1. Texas Instruments2. Jacinto AI DevKit2.1. jacinto-ai-devkit/README_OLD.md 3. EdgeAI Software And Development Tools (边缘 AI)References 1. Texas Instruments https://github.com/TexasInstruments TI is a global semic…

【记录】个人博客或笔记中的数学符号设定

note 这里记录个人博客中常用的数学符号数学格式和对应含义 文章目录 note数与数组索引集合线性代数微积分概率和信息论数据与概率分布函数深度学习中的常用数学表达方式 数与数组 α 标量 α 向量 A 矩阵 A 张量 I n n 行 n 列单位矩阵 v w 单词 w 的分布式向量表示 …

Linux第59步_“buildroot”构建根文件系统第1步_生成rootfs.tar和rootfs.ext4以及通过nfs下载测试

学习安装“buildroot”,通过配置构建根文件系统,编译生成rootfs.tar和rootfs.ext4,以及通过nfs下载测试。 1、了解学习目的: 1)、获取“buildroot”安装包; 2)、使用“buildroot”构建根文件系统; 3)、…

相机图像质量研究(31)常见问题总结:图像处理对成像的影响--图像差

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结:光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结:光学结构对成…

MySQL中的聚集索引和非聚集索引

1. 聚集索引(Clustered Index)的定义与特点 聚集索引是一种特殊类型的索引,其中表中的数据行实际上是按照索引键的顺序存储的。在MySQL的InnoDB存储引擎中,聚集索引通常与表的主键关联。 特点: 每个表只能有一个聚集…

6.函数是特殊的对象2 - JS

在第一部分中,主要总结了函数作为一个对象的常见属性(name/length)、如何自定义属性以及如何使用函数构造器(Function)。 这里总结函数作为对象的常见方法(apply/call/bind/toString)。 使用 c…

一起学量化之Aroon指标

Aroon指标是由Tushar Chande于1995年开发的技术分析工具,旨在识别股票是否处于趋势中及趋势的强度。它通过分析股票价格在一定周期内创下的新高和新低来预测趋势的变化,这基于一种观念:强势趋势通常伴随着频繁的新高或新低。 1. Aroon指标的组成 Aroon指标由两个部分组成:…

ADC--模拟量转换成数字量

目录 一、ADC硬件组成七大部分: 二、单次转换,连续转换,不连续采样模式,扫描模式区别 1、举例(5种组合情况) 2、模拟看门狗中断的作用: 三、MCU使用ADC步骤 一、ADC硬件组成七大部分: ①输入电压&#…

103.网游逆向分析与插件开发-网络通信封包解析-网络完成端口模型的流程

内容参考于:易道云信息技术研究院VIP课 上一个内容:解读喊话道具数据包并且利用Net发送 通过之前的内容,把游戏的网络通信中关于发送数据的分析好了(任意涉及网络的应用程序里发送数据的数据包定位与分析都可以参考之前的内容&a…

Java实战:构建智能工作量统计系统

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

如何清除谷歌浏览器的缓存?这里有详细步骤

如果你想解决加载或格式化问题,以改善你在谷歌Chrome上的浏览体验,那么清除缓存和cookie是一个很好的开始。以下是删除它们的方式和操作。 删除缓存和cookie时会发生什么 当你访问一个网站时,它有时会保存(或记住)某…

MybatisPlus大量数据批量新增优化

首先我们如果for循环依次遍历插入数据效率是十分底下的&#xff0c;大概耗时5分钟左右。 for循环插入测试代码&#xff1a; Test void testSaveOneByOne() {long b System.currentTimeMillis();for (int i 1; i < 100000; i) {userService.save(buildUser(i));}long e …

DS:八大排序之堆排序、冒泡排序、快速排序

创作不易&#xff0c;友友们给个三连吧&#xff01;&#xff01; 一、堆排序 堆排序已经在博主关于堆的实现过程中详细的讲过了&#xff0c;大家可以直接去看&#xff0c;很详细,这边不介绍了 DS&#xff1a;二叉树的顺序结构及堆的实现-CSDN博客 直接上代码&#xff1a; …

算法||实现典型数据结构的查找、添加和删除数据 并分析其时间和空间复杂度

实现典型数据结构的查找、添加和删除数据 并分析其时间和空间复杂度 线性结构&#xff1a; 数组&#xff1a;是一种线性表数据结构&#xff0c;它用一组连续的内存空间&#xff0c;来存储一组具有相同类型的数据。 查找数据 &#xff1a;随机访问 流程图 /** 查询元素下标…

QML | 属性特性(property)

一、属性特性 属性是对象的一个特性,可以分配一个静态的值,也可以绑定一个动态表达式。属性的值可以被其他对象读取。一般而言,属性的值也可以被其他对象修改,除非显式声明不允许这么做,也就是声明为只读属性。 1.定义属性特性 属性可以在C++中通过注册一个类的Q_PROPERT…

anaconda安装路径默认在D盘,但安装环境的envs路径跑到C盘,修改为D盘

安装的anaconda环境&#xff0c;路径是在anaconda安装目录下的envs中&#xff08;D:\APPFile\Anaconda3\envs&#xff09;&#xff0c;然而&#xff0c;这次创建的却是在 C:\Users\xxx.conda\envs 中。 首先&#xff0c;找到用户目录下的.condarc文件&#xff08;C:\Users\use…

随想录刷题笔记 —二叉树篇7 617合并二叉树 700二叉搜索树中的搜索 98验证二叉搜索树

617合并二叉树 递归&#xff1a;如果root1和root2其中有一个为空&#xff0c;则将另一个的结点直接赋值即可——将该节点和子树都直接赋值过去了。 如果都不是空&#xff0c;就需要重新建立一个结点再进入递归。 class Solution {public TreeNode mergeTrees(TreeNode root1…

力扣题目训练(12)

2024年2月5日力扣题目训练 2024年2月5日力扣题目训练476. 数字的补数482. 密钥格式化485. 最大连续 1 的个数148. 排序链表164. 最大间距 2024年2月5日力扣题目训练 2024年2月5日第十二天编程训练&#xff0c;今天主要是进行一些题训练&#xff0c;包括简单题3道、中等题2道和…

LeetCode--代码详解 231.2的幂

231. 2的幂 题目 给你一个整数 n&#xff0c;请你判断该整数是否是 2 的幂次方。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 如果存在一个整数 x 使得 n 2x &#xff0c;则认为 n 是 2 的幂次方。 示例 1&#xff1a; 输入&#xff1a;n 1…