模运算是数论的一个分支,它本身是有用的,在整数分解、历法和天文计算以及密码学等学科中也是一种工具。卡尔·弗里德里希·高斯在他的书中将模运算系统化算术研究1801年出版。
模运算是一种整数运算系统,其中所有结果都表示为小于模的非负整数。模运算的一个常见用法是十二小时钟,九点后八小时为五点;即9+8≡5(mod 12)。模运算中使用的≡符号表示同余,而不是等式。如果两个数之差是模的偶数倍,则它们在给定模中是同余的;例如17≡5(mod 12)。模加法类似于常规加法,但在模上“缠绕”。模减法是模加法的逆运算,模乘只是重复的模加法;例如4−9 lect 7(mod 12)和3×7 lect 9(mod 12)。
模除是模乘的逆运算,正如正则除法是正则乘法的逆运算一样。在模运算中,整数的模逆第页那是整数吗q个对于其中第页×q个≡1(modn个); 模逆是未定义的,正如被零除也是未定义的一样,除非目标数与模互素。扩展欧几里德算法计算逆;鉴于斧头+通过=克=gcd(x个,年),何时克=1和x个> 0,b条(修订版x个)和一(修订版年)是的倒数吗年(修订版x个)和x个(修订版年)分别是。那么模除就是模乘的逆运算。例如,9÷7≡3(模12)。
模运算中的指数运算是重复的模乘,正如指数运算是普通运算中的重复乘法一样。模幂运算可以通过首先计算幂运算,然后执行模运算来实现,但这可能需要一个较大的中间结果。更好的方法是在每次乘法时执行模运算,如有可能,进行平方运算,以减少中间乘法的数量。
在模运算中,平方根被定义为与自身相乘时等于目标数的数字,就像在普通算术中一样。就像在普通算术中一样,每个平方根在零的“另一边”都有一个共轭,除了在模运算中没有零的“另外一边”,所以这两个共轭是彼此的负值,与模相加。例如,18(mod 31)的平方根是7和24,因为7×7≡18(mod31)和24×24≡18。
在模运算中,平方根是一个比常规运算更困难的概念,因为在许多情况下模平方根是不存在的。例如,考虑正方形x个2(型号13),0≤x个<13:0、1、4、9、3、12、10、10、12、3、9、4、1。模13的平方不能等于7,因此模13的7的平方根不存在;模13的平方根只有1、3、4、9、10和12,或者等价地是±1、±3和±4。另一个限制是,只有当模是奇数素数时,才定义模平方根。例如,考虑正方形x个2(mod 15),0≤x个< 15: 0, 1, 4, 9, 1, 10, 6, 4, 4, 6, 10, 1, 9, 4, 1. 数字4有两组共轭平方根:±2和±7。由于解不是唯一的,当模量为复合模量时,可以说模平方根不存在。
如果你需要复习一下支持模运算的数学,你可以查阅任何数论教科书,或在网上搜索模运算、bezout恒等式、模逆、雅可比符号和二次剩余等术语。
您的任务是编写一个库,为模块算术的基本操作提供方便的访问:加法、减法、乘法、除法、求幂和平方根。完成后,欢迎您阅读或运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。
页:1 2