我正在为我的编程课做一个python作业。这个问题要求我们采取一些输入并以a / b mod N的形式进行,将a / b mod N作为0和n-1之间的整数返回。如果b有乘法逆mod N
这就是我所做的:例如,输入>>> a = 3,b = 2,n = 7 获取输入并评估3/2,然后评估1.5mod7
然而,这不是老师想要的答案。正确的答案是5。我想要做的是找到范围(1,n)中的整数,使得*整数== 1 mod N.这就是我们想要的。但是,在我给出的所有测试用例中,只有示例以这种方式工作。以下是输入和正确输出的示例
input1: 3,2,7
input2: 14, 67, 88
input3: 10, 3, 40
out1:5
out2:58
out3:30
我知道一些答案是未定义的,我知道如何获得这些答案,
我完全迷失了如何做到这三个并得到他所需要的答案。
答案 0 :(得分:0)
在正常算术中,可以通过乘以逆来执行除法。例如,2的倒数是1/2,因此要将3除以2,您可以将3乘以1/2。注意2和它的逆1/2乘以1,这总是正确的;这就是逆的定义。
模运算不允许除法,因此必须乘以逆。当工作mod 7时,2的倒数是4,因为2 * 4 = 8 = 1(mod 7);逆是总是那个乘以时等于1的数,就像在普通算术中一样。因此,要将3除以2(mod 7),将3乘以4(mod 7)。现在3 * 4 = 12 = 5(mod 7),结果是5,正如你的老师说的那样。
您可以使用扩展的欧几里德算法计算数字的模逆。我会留给你工作的。您可以在很多地方查找扩展的欧几里德算法(可能包括您的教科书或教师给您的课堂笔记)。或者,如果您的代码出现问题,您可以回到这里并提出另一个问题。