如何限制Python只能使用整数?

时间:2015-03-18 08:16:31

标签: python

这是我的代码:

import math

# I define a function that will calculate the log

def shank(a,p,z):
    x=math.log(p,a)%z

    return (x)

print("First log")
print(shank(106, 12375, 24691))


print("Second log")
print(shank(6, 248388, 458009))

我得到了正确的答案,但它并没有给我整数。例如,如果我输入

print(shank(3, 525, 809))

我得到5.701190790597276,而309也可以,我会更喜欢这个答案。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

math.log(p, a) % z不是离散对数。这个表达式告诉Python计算一个常规对数,除以z,并给你余数。如果你能以某种方式限制Python仅使用整数,你仍然不会得到离散对数;当Python发现math.log(p, a)没有整数解决方案时,你会得到一个异常。

Python没有内置的离散对数例程。有效地计算离散对数是计算机科学中一个着名的未解决的问题,并且许多加密系统依赖于它很难。也就是说,如果您使用一个非常慢的解决方案,那么您可以计算越来越高的模块化功能,直到找到一个有效的功能:

def discrete_log(base, target, modulus):
    i = 0
    power = 1
    while power != target:
        power = (power * base) % modulus
        i += 1
    return i