Python 为什么列表会记住模数计算?鼠尾草
我在sageMath工作表中有一个列表,如下所示Python 为什么列表会记住模数计算?鼠尾草,python,sage,Python,Sage,我在sageMath工作表中有一个列表,如下所示 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,但应该返回2071
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上再做一次模计算
for i in range(len(v)):
v[i] = mod(v[i], next_prime(m*m))
我的问题是是否有更好的方法来解决这个问题我现在理解你的问题了。当您使用
mod()
时,它会自动生成一个模为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您的解决方案如何解决问题的可能重复?这是一个不同于上面我假设的计算,除非下一个μ素数取m*m的根。你所说的“mod()函数在某种程度上仍然被列表记住”是什么意思。试着清楚地表达你想要的。另外,试着提供一个必要导入的示例(mod和next_prime从哪里来?),不要让人们试图帮你猜所有的东西。@CodeMonkey我猜他是想通过执行x=v
来复制listv
,其中x
是要复制到的变量。而且,正如许多经验丰富的蟒蛇学家所知,这是行不通的。@leaf我不知道他在做什么。我试着给他建设性的批评,这样他将来可以提出更好的问题。如果你不想改变v
中的数字,为什么要改变它们?相反,您应该创建一个包含模数计算结果的新列表。一个很好的方法是使用列表理解。