Modulo 分数模运算
我被困在这个密码问题上,使用整数和分数的乘法mod 10 以下是方程式:Modulo 分数模运算,modulo,Modulo,我被困在这个密码问题上,使用整数和分数的乘法mod 10 以下是方程式: 7 * (4/11) mod 10 =? 我知道我应该把它转换成一个整数,因为mod运算符不能处理分数,但是我不能理解这个。显然, 7 * (4/11) = 28/11, 但是我不能得到分数的mod 10。讲师想要的是准确的答案,而不是小数点。任何帮助都将不胜感激 请看这里:“打开” 定义模块化函数的一种自然方法是 a(模b)=a− B⌊a/b⌋ 在哪里⌊⋅⌋ 表示的是。这是格雷厄姆、克努特、帕塔什尼克在这本颇具影响力
7 * (4/11) mod 10 =?
我知道我应该把它转换成一个整数,因为mod运算符不能处理分数,但是我不能理解这个。显然,
7 * (4/11) = 28/11,
但是我不能得到分数的mod 10。讲师想要的是准确的答案,而不是小数点。任何帮助都将不胜感激 请看这里:“打开”
定义模块化函数的一种自然方法是
a(模b)=a− B⌊a/b⌋
在哪里⌊⋅⌋ 表示的是。这是格雷厄姆、克努特、帕塔什尼克在这本颇具影响力的书中所采用的方法
这将给你1/2(mod3)=1/2
要解决您的问题,您需要a=7*(4/11)=28/11
,以及b=10
a/b
=(28/11)/10=0.254545
⌊a/b⌋代码>=0
b⌊a/b⌋代码>=0*0=0
a-b⌊a/b⌋代码>=28/11-0=28/11
这意味着你的答案是28/11
Wolfram Alpha并给出28/11
作为精确结果。也同意,但以小数形式给出,2.5454
分数是一个精确的答案,而不是小数。我可以推测符号是错误的,整个表达式应该在每个中间阶段的mod 10中进行计算。因为(11模1)是1,所以答案是(7*4)模10=8
设想一个只支持1位数的计算器
我并不是说这是正确的答案,我同意28/11是正确的答案,但我试图进入教授的头脑。这在密码学中很常见,在密码学中,每次计算都是在2^256模左右执行的。8
8确实是正确的答案
7*4/11模10
意味着我们正在研究7*4*x模10
其中x是11模10的模逆,这意味着11*x模10=1
。
这适用于x=1
(11*1 mod 10=1
)
因此,7*4*x mod 10
变成了7*4*1 mod 10
,即28 mod 10=8
,原来的问题可能应该这样写,因为这有不同的含义,这意味着每个术语都使用隐含的mod 10
操作进行评估
这个问题有点奇怪,因为模值10不是通用的,因为它不是素数。例如,由于未定义1/2 mod 10
,无法计算以下内容,因为2和10不是互质
因此,以下是讲师的正确答案。我不知道他是怎么想到这个的:
7 4/11 mod 10 = ((7 4) mod 10)(11−1 mod 10) mod 10
= (28 mod 10)(1 mod 10) mod 10
= (8)(1) mod 10
= 8 mod 10
使用Python:
from fractions import Fraction
from math import fmod
print (fmod(Fraction(28, 11), 10))
结果将是2.5454。所以我想8是错的。如果x不是整数,首先需要定义x mod 10的含义。如果x
和y
是整数,那么一个定义就是x/y mod 10
等于[x mod(10*y)]/y
(这将是一个合理的值)。我也得到了28/11,但我的教授声称这是错误的。出于兴趣,你的教授得到了什么答案?除非是26/11
(=28/11写为整数和a)我不确定他能得到什么答案。根据公认的答案,教授想要(28 mod 10)/(11 mod 10)
谢谢大家。我感谢你的帮助。我会发回讲师想要的确切答案。你能解释一下你做了什么,以及你是如何得出答案的吗