如何向该算法的 s 部分添加打印函数以打印出已进行的所有迭代?
How Can I Add a Print Function To s Section Of this Algorithm To Print Out All Iterations That Has Been Made?
我正在研究中间相遇算法的一个部分;也称为“碰撞算法”。这是代码
Python 3 Program To Calculate The Discrete Logarithm Problem Using The Collision Algorithm
import math;
def discreteLogarithm(a, b, m):
n = int(math.sqrt (m) + 1);
# Calculate a ^ n
an = 1;
for i in range(n):
an = (an * a) % m;
value = [0] * m;
# Store all values of a^(n*i) of LHS
cur = an;
for i in range(1, n + 1):
if (value[ cur ] == 0):
value[ cur ] = i;
cur = (cur * an) % m;
cur = b;
for i in range(n + 1):
# Calculate (a ^ j) * b and check
# for collision
if (value[cur] > 0):
ans = value[cur] * n - i;
if (ans < m):
return ans;
cur = (cur * a) % m;
return -1;
# Driver code
a = 2;
b = 3;
m = 5;
print(discreteLogarithm(a, b, m));
# This code is contributed by mits.
考虑到这部分代码,我实际上遇到了问题...
我的意图是将此代码拆分成多个部分以单独应用它们。在下面这段代码的这一部分中,我试图应用某种打印功能来打印已存储的所有迭代,但我不只是做对了。
# Store all values of a^(n*i) of LHS
cur = an;
for i in range(1, n + 1):
if (value[ cur ] == 0):
value[ cur ] = i;
cur = (cur * an) % m;
您在寻找 print()
函数吗?这是带有一些打印输出的代码示例。请注意,您的某些代码行末尾有不必要的分号。我删除了它们。
import math
def discreteLogarithm(a, b, m):
_n = int(math.sqrt(m) + 1)
print(f"_n = {_n}")
# Calculate a ^ n
print("### Calculate a ^ n")
an = 1
for i in range(_n):
an = (an * a) % m
print(f"an = {an}")
value = [0] * m
# Store all values of a^(n*i) of LHS
print("### Store all values of a^(n*i) of LHS")
cur = an
for i in range(1, _n + 1):
if (value[cur] == 0):
value[cur] = i
cur = (cur * an) % m
print(f"cur1 = {cur}")
cur = b
# Calculate (a ^ j) * b and check for collision
print("### Calculate (a ^ j) * b and check for collision")
for i in range(_n + 1):
if (value[cur] > 0):
ans = value[cur] * _n - i
print(f"ans = {ans}")
if (ans < m):
return ans
cur = (cur * a) % m
print(f"cur = {cur}")
return -1
if __name__ == "__main__":
# Driver code
a = 2
b = 3
m = 5
ans = discreteLogarithm(a, b, m)
print(f"### discreteLogarithm({a}, {b}, {m})")
print(f"ans = {ans}")
# This code is contributed by mits.
我正在研究中间相遇算法的一个部分;也称为“碰撞算法”。这是代码
Python 3 Program To Calculate The Discrete Logarithm Problem Using The Collision Algorithm
import math;
def discreteLogarithm(a, b, m):
n = int(math.sqrt (m) + 1);
# Calculate a ^ n
an = 1;
for i in range(n):
an = (an * a) % m;
value = [0] * m;
# Store all values of a^(n*i) of LHS
cur = an;
for i in range(1, n + 1):
if (value[ cur ] == 0):
value[ cur ] = i;
cur = (cur * an) % m;
cur = b;
for i in range(n + 1):
# Calculate (a ^ j) * b and check
# for collision
if (value[cur] > 0):
ans = value[cur] * n - i;
if (ans < m):
return ans;
cur = (cur * a) % m;
return -1;
# Driver code
a = 2;
b = 3;
m = 5;
print(discreteLogarithm(a, b, m));
# This code is contributed by mits.
考虑到这部分代码,我实际上遇到了问题...
我的意图是将此代码拆分成多个部分以单独应用它们。在下面这段代码的这一部分中,我试图应用某种打印功能来打印已存储的所有迭代,但我不只是做对了。
# Store all values of a^(n*i) of LHS
cur = an;
for i in range(1, n + 1):
if (value[ cur ] == 0):
value[ cur ] = i;
cur = (cur * an) % m;
您在寻找 print()
函数吗?这是带有一些打印输出的代码示例。请注意,您的某些代码行末尾有不必要的分号。我删除了它们。
import math
def discreteLogarithm(a, b, m):
_n = int(math.sqrt(m) + 1)
print(f"_n = {_n}")
# Calculate a ^ n
print("### Calculate a ^ n")
an = 1
for i in range(_n):
an = (an * a) % m
print(f"an = {an}")
value = [0] * m
# Store all values of a^(n*i) of LHS
print("### Store all values of a^(n*i) of LHS")
cur = an
for i in range(1, _n + 1):
if (value[cur] == 0):
value[cur] = i
cur = (cur * an) % m
print(f"cur1 = {cur}")
cur = b
# Calculate (a ^ j) * b and check for collision
print("### Calculate (a ^ j) * b and check for collision")
for i in range(_n + 1):
if (value[cur] > 0):
ans = value[cur] * _n - i
print(f"ans = {ans}")
if (ans < m):
return ans
cur = (cur * a) % m
print(f"cur = {cur}")
return -1
if __name__ == "__main__":
# Driver code
a = 2
b = 3
m = 5
ans = discreteLogarithm(a, b, m)
print(f"### discreteLogarithm({a}, {b}, {m})")
print(f"ans = {ans}")
# This code is contributed by mits.