我有一个数组Array = {},数组的大小是n
我的约束是这样的:
n< = 100000 和数组 i < = 100
我必须找到数组中所有元素的产品,我将获得一个mod值,我必须使用它修改产品。 mod将始终对值进行更改,此mod值始终小于或等于n。
我的问题是当我选择时,一个全局mod值表示R = 1000000000(远远大于mod约束),每当我的产品超过这个值时,我都会修改结果。
但我不知道为什么我获得的结果为零。
我的问题是如何在这种情况下选择R?
答案 0 :(得分:1)
您没有向我们展示您的代码,但可能看起来像下面的伪Python代码:
limit = 1000000
def product_mod( array, m ):
product = 1
for k in array:
product = product * k
if product > limit: product = product % m
return product % m
此算法应工作,前提是限制足够低,product * k
永远不会溢出。如果没有,您的代码可能有错误。
然而,请注意,此函数的结果很可能通常合法地为零:具体而言,只要数组中的数字乘积均匀地除以模数,就会发生这种情况。由于该产品通常是一个高度复合的数字(它的至少因为数组中有数字的因素很多),这很可能。
特别是,无论何时,函数的输出都为零:
在所有这些情况下,数组中所有数字的乘积将为零或模数的倍数(并因此将减少到零)。
答案 1 :(得分:1)
我不知道你的代码,但它就像0是正确的结果。
选择R大素数并确保所有元素都不能被此数字整除,以便得到与0不同的结果。
答案 2 :(得分:0)
听起来你正在计算数组中某些给定值的值的乘积,但是正在使用另一个值来限制中间计算中的整数溢出。那么你很有可能得到错误的结果。
例如 120 mod 9 = 3
(120 mod 100) mod 9 = 20 mod 9 = 2
然后,正确的程序是以与(a * b) mod n = (a mod n) * (b mod n) mod n
例如 (24 * 5) mod 9 = (24 mod 9) * (5 mod 9) mod 9 = (6 * 5) mod 9 = 30 mod 9 = 3