有长度为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)

明白了吗?

07-24 15:09