Math 在集合的均方根为整数的情况下,如何查找整数列表(多集合,大小为n)?
我已经找到了 暴力当然是可能的,但还有其他方法吗?有没有办法找到所有的多重集?有没有办法找出在某一限制下存在多少组合 也许这个问题太数学了,如果是这样的话,我会提出它Math 在集合的均方根为整数的情况下,如何查找整数列表(多集合,大小为n)?,math,rms,Math,Rms,我已经找到了 暴力当然是可能的,但还有其他方法吗?有没有办法找到所有的多重集?有没有办法找出在某一限制下存在多少组合 也许这个问题太数学了,如果是这样的话,我会提出它 我在javascript中通过生成数字列表的所有可能组合,然后检查整数RMS来创建。但这些是集合,而不是多集合。编辑:我使用N表示和值,K表示平方数 多个集合的数量增长很快,所以N应该有一个合理的值。因此,这个问题相当于用K个货币改变N的总和,这些货币的名称是1,4,9,25…(变量的数量可以使用动态规划计算) 最简单的实现是递归
我在javascript中通过生成数字列表的所有可能组合,然后检查整数RMS来创建。但这些是集合,而不是多集合。编辑:我使用N表示和值,K表示平方数 多个集合的数量增长很快,所以N应该有一个合理的值。因此,这个问题相当于用K个货币改变N的总和,这些货币的名称是
1,4,9,25…
(变量的数量可以使用动态规划计算)
最简单的实现是递归的——我们只生成所有可能的加数。在我的Delphi实现中,为了简单起见,我收集字符串(而不是列表)中的summand
注意,这样的实现可能会一次又一次地生成相同的序列——在我的示例中,注意{5,7}
结束序列。为了提高性能(对于较大的N和K值很重要),有必要将生成的序列存储在表或映射中(使用{N;K;Min}
键)。在这种情况下,从大求和生成小求和会更好,因为小求和会产生大量重复模式
procedure FSP(N, K, Minn: Integer; Reslt: string);
var
i: Integer;
begin
if (K = 0) then begin
if (N = 0) then
Memo1.Lines.Add(Reslt); //yield result
Exit;
end;
i := Minn;
while (i * i <= N) do begin
FSP(N - i * i, K - 1, i, Reslt + Format('%d ', [i]));
i := i + 1;
end;
end;
procedure FindSquarePartitions(N, K: integer);
begin
FSP(N, K, 1, '');
end;
FindSquarePartitions(101, 5);
1 1 1 7 7
1 1 3 3 9
1 1 5 5 7
1 2 4 4 8
1 5 5 5 5
2 2 2 5 8
2 3 4 6 6
2 4 4 4 7
3 3 3 5 7
procedure-FSP(N,K,Minn:Integer;Reslt:string);
变量
i:整数;
开始
如果(K=0),则开始
如果(N=0),则
备忘录1.行。添加(Reslt)//产量结果
出口
结束;
i:=明尼苏达州;
虽然(我*我认为这对这个网站的数学有点重要。你需要唯一性吗?找到一个多重集很简单。我认为你最好在math.stackexchange.com上找一些丢番图方程专家。总和的范围是有限的吗?@MBo不,一点也不,但让我们说我们正在寻找find_rms_整数(n,r)其中n=列表的大小,r=选择的rms值谢谢,非常有趣