欧几里德定理程序

时间:2018-07-21 06:38:10

标签: python python-3.x

我根据欧几里得除法定理编写了一个计算商和余数的代码。

a,b=input().split()
a=int(a)
b=int(b)

if(a<0 and b>0):
    q=int(a/b)-1
    r=a-(b*q)
    print(q,end=" ")
    print(r)

elif(a>0 and b<0):
    q=int(a/b)
    r=a-(b*q)
    print(q,end=" ")
    print(r)

elif(a>0 and b>0):
    q=int(a/b)
    r=a-(b*q)
    print(q,end=" ")
    print(r)

elif(a<0 and b<0):
    q=int(a/b)-1
    r=a-(b*q)
    print(q,end=" ")
    print(r)    

这里是根据欧几里得除法则来计算商和余数的任何错误。?实际上这是uri在线法官的1837年没问题。我编写这段代码并提交,但显示40%错误的答案。程序说明:{{3 }}

1 个答案:

答案 0 :(得分:0)

错误的答案是由于您当前的实现并不能确保计算得出的ra,b < 0时为正数。实际上,如果您检查提供的链接,您将看到该定理定义了0 ≤ r < |b|

使用输入值a = -7b = -3测试当前算法,您将得到q = 1r = -4。但正如我们所说,我们需要r ≥ 0

使用输入值a = -7b = -3再次尝试以下代码。这次您将获得q = 3r = 2,它们也满足a = b × q + r等式:-7 = -3 x 3 + 2

最后-为了避免造成误解-我添加了一个条件来控制并明确涵盖b = 0的那些输入,这是欧几里德除法则不接受的另一种情况

def euclidean_division(a, b):

    if(a < 0 and b > 0):
        q = int(a/b) - 1
        r = a - (b*q)

    elif(a > 0 and b < 0):
        q = int(a/b)
        r = a - (b*q)

    elif(a > 0 and b > 0):
        q = int(a/b)
        r = a - (b*q)

    elif(a < 0 and b < 0):
        q = int((a+b)/b)
        r = a - (b*q)

    return q, r  

def main():
    print("Please insert two integer values separated by a space")
    print("NOTE: the second integer is NOT allowed to be equal to zero")
    first_input, second_input = input().split()
    first_int=int(first_input)
    second_int=int(second_input)

    if(second_int != 0):
        first_output, second_output = euclidean_division(first_int, second_int)
        print("q = " + str(first_output) + " r = " + str(second_output))
    else:
        print("Second integer must be other than 0")
        print("Try again\n")
        main()

if __name__ == "__main__":
    main()

注意:此示例还证明了使用r ≥ 0来保证解决方案唯一性的重要性

祝你好运!