首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连续数f(n) = n(n-1)(n-2)(n-3)(n- .)的乘积求n的值

连续数f(n) = n(n-1)(n-2)(n-3)(n- .)的乘积求n的值
EN

Stack Overflow用户
提问于 2021-07-15 18:28:22
回答 2查看 160关注 0票数 0

有没有办法找到连续自然数的programmatically

在互联网上,我发现了一些例子,要么使用因式分解,要么使用多项式求解。

示例1

代码语言:javascript
复制
For n(n−1)(n−2)(n−3) = 840

n = 7, -4, (3+i√111)/2, (3-i√111)/2

示例2

代码语言:javascript
复制
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。

谢谢

EN

回答 2

Stack Overflow用户

发布于 2021-07-15 20:09:40

如果您只对自然的"n“解决方案感兴趣,那么这个推理可能会有所帮助:

比方说n(n-1)(n-2)(n-3)...(n-k) = A

然后,解决方案n=s验证:

A/s的

  • 余数=0
  • 剩余的A/(s-1) =0
  • 剩余的A/(s-2) = 0

诸若此类

现在,我们看到s的顺序是t= A^(1/k):a类似于s*s*s*s*s... k倍。所以我们可以从v= (t-k)开始,在v= t+1结束。解决方案将在这两个值之间。

所以,大概是:

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2021-07-16 20:49:31

假设:

  • n is an integer,and
  • n > 0,and
  • k < n

然后大约:

代码语言:javascript
复制
n = FLOOR( (product ** (1/(k+1)) + (k+1)/2 ) 

我发现的唯一不完全正确的情况是,当k非常接近n时。当然,你可以通过反算产品来检查它,看看它是否匹配。如果没有,几乎肯定只有1或2比这个估计值高,所以只需继续递增n,直到产品匹配为止。(如果你需要的话,我可以用伪码写)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68399087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档