我在sageMath工作表中有一个列表v
,如下所示
v = [3, 5, 22, 35, 230, 308, 683, 6546]
m = 14002
a = 185
然后我对列表中的每个数字进行模数计算
for i in range(0, len(v)):
v[i] = mod(v[i] * a, m)
我的问题是,当我后来想要对列表进行其他计算时,mod()函数以某种方式仍然被列表记住。我试图将列表复制到另一个列表,但它不起作用。
例如,下面的循环返回6714
,但应该返回20716
和
20716 % 14002 = 6714
for i in range(len(v)):
c = c + v[i]
我通过在v上再进行一次modulu计算解决了这个问题,如
for i in range(len(v)):
v[i] = mod(v[i], next_prime(m*m))
我的问题是,是否有更好的方法来解决问题
答案 0 :(得分:1)
我现在明白你的问题。使用mod()
时会发生什么,它会自动生成整数元素 modulo n ,而不仅仅是任何旧整数。所以你永远不能摆脱它。如果你真的想要剩下的,你可以使用内置的Python %
:
v = [3, 5, 22, 35, 230, 308, 683, 6546]
m = 14002
a = 185
for i in range(0, len(v)):
v[i] = v[i] * a % m
for i in range(len(v)):
print v[i]*m
产生以7771110
开头的列表。类型仍然(正确)为sage.rings.integer.Integer
。