有没有办法找到连续自然数的programmatically?
在互联网上,我发现了一些例子,要么使用因式分解,要么使用多项式求解。
示例1
For n(n−1)(n−2)(n−3) = 840
n = 7, -4, (3+i√111)/2, (3-i√111)/2示例2
For n(n−1)(n−2)(n−3) = 1680
n = 8, −5, (3+i√159)/2, (3-i√159)/2 这两个例子都给出了4个结果(因为它们都是4度方程),但对于我的用例,我只对自然值感兴趣。此外,该解决方案应该适用于任何序列大小为的连续数字,换句话说,就是n(n−1)(n−2)(n−3)(n−4)...。
解决方案可以是一个算法,也可以来自任何开放的数学库。传递给算法的参数是乘积和度(序列大小),就像这两个例子一样,乘积为840或1640,两者都为4。
谢谢
发布于 2021-07-15 20:09:40
如果您只对自然的"n“解决方案感兴趣,那么这个推理可能会有所帮助:
比方说n(n-1)(n-2)(n-3)...(n-k) = A
然后,解决方案n=s验证:
A/s的
诸若此类
现在,我们看到s的顺序是t= A^(1/k):a类似于s*s*s*s*s... k倍。所以我们可以从v= (t-k)开始,在v= t+1结束。解决方案将在这两个值之间。
所以,大概是:
s= 0
t= (int) (A^(1/k)) //this truncation by leave out t= v+1. Fix it in the loop
theLoop:
for (v= t-k to v= t+1, step= +1)
{ i=0
while ( i <= k )
{ if (A % (v - k + i) > 0 ) // % operator to find the reminder
continue at theLoop
i= i+1
}
// All are valid divisors, solution found
s = v
break
}
if (s==0)
not natural solution发布于 2021-07-16 20:49:31
假设:
n is an integer,andn > 0,andk < n然后大约:
n = FLOOR( (product ** (1/(k+1)) + (k+1)/2 ) 我发现的唯一不完全正确的情况是,当k非常接近n时。当然,你可以通过反算产品来检查它,看看它是否匹配。如果没有,几乎肯定只有1或2比这个估计值高,所以只需继续递增n,直到产品匹配为止。(如果你需要的话,我可以用伪码写)
https://stackoverflow.com/questions/68399087
复制相似问题