有长度为m的数组,其中所有条目都是正(>=0)整数。我希望条目的总和为0 mod n。
我想要一个所有这些数组的列表,其中的条目平方和小于k。
我该怎么做?我想不出一种方法能找到所有这样的数组,只是其中的一部分。
我可以显示我用python编写的内容,但是我的方法有缺陷,我需要从头开始,所以除非有人要求,否则我不会显示它。
最佳答案
我现在只能想出一个非常残忍的解决办法。让我举一个实数例子。设m=4,n=5,k=25。因此,您需要的是遍历所有数组,并对每个位置测试从1到给定范围u的所有数字。
为了计算这个u,我考虑了这个。在这种最坏的情况下,你会得到如下的东西:
[11库存1件]
这意味着3+u**2必须小于k。因此,我使用u作为int(sqrt(k-(m-1)))。
from math import sqrt
array = [1, 2, 3, 4]
comb = [0 for i in range(m)]
u = int(sqrt(k-m+1))
all_combs(comb, 0, 0, 0)
def all_combs(comb, pos, sum, square_sum):
global n, m, u, k
if (square_sum > k):
# Invalid case
return
if (pos == m):
if (sum % n == 0):
print comb
return
for i in range(1,u+1):
comb[pos] = i
all_combs(comb, pos + 1, sum + i, sum_square + i**2)
明白了吗?