评估模块化任务的解释?

时间:2014-01-15 02:01:03

标签: algorithm theory

我正在为我的编程课做一个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

我知道一些答案是未定义的,我知道如何获得这些答案,

我完全迷失了如何做到这三个并得到他所需要的答案。

1 个答案:

答案 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,正如你的老师说的那样。

您可以使用扩展的欧几里德算法计算数字的模逆。我会留给你工作的。您可以在很多地方查找扩展的欧几里德算法(可能包括您的教科书或教师给您的课堂笔记)。或者,如果您的代码出现问题,您可以回到这里并提出另一个问题。