Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么列表会记住模数计算?鼠尾草_Python_Sage - Fatal编程技术网

Python 为什么列表会记住模数计算?鼠尾草

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

我在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
,但应该返回
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
来复制list
v
,其中
x
是要复制到的变量。而且,正如许多经验丰富的蟒蛇学家所知,这是行不通的。@leaf我不知道他在做什么。我试着给他建设性的批评,这样他将来可以提出更好的问题。如果你不想改变
v
中的数字,为什么要改变它们?相反,您应该创建一个包含模数计算结果的新列表。一个很好的方法是使用列表理解。