Algorithm 重复模式下的整数因子分解

Algorithm 重复模式下的整数因子分解,algorithm,math,integer,diophantine,Algorithm,Math,Integer,Diophantine,我正在寻找一个有效的解决方案来解决整数分解的一个特殊情况。所谓高效,我的意思是比我目前拥有的O(2^n)快得多(n表示完成后数组中的元素数) 假设我们有以下数组:[4,5,11]和84的“目标” 我们想知道是否有可能满足4*a+5*b+11*c=84 鉴于以下限制: 首先,这个术语是错误的。它不是一个线性模型,而是一个包含许多变量和一些附加约束的线性模型 没有你的约束,这将是一项容易的任务。只要找到GCD(系数列表),如果它除以自由项,你就有了一个解,否则就没有了 对于约束,这可能是第一步,

我正在寻找一个有效的解决方案来解决整数分解的一个特殊情况。所谓高效,我的意思是比我目前拥有的
O(2^n)
快得多(n表示完成后数组中的元素数)


假设我们有以下数组:
[4,5,11]
和84的“目标”

我们想知道是否有可能满足
4*a+5*b+11*c=84

鉴于以下限制:


  • 首先,这个术语是错误的。它不是一个线性模型,而是一个包含许多变量和一些附加约束的线性模型

    没有你的约束,这将是一项容易的任务。只要找到GCD(系数列表),如果它除以自由项,你就有了一个解,否则就没有了

    对于约束,这可能是第一步,但是如果您看到有解决方案,它们可能不满足约束


    我没有看到一个快速的(多项式解),所以这里是我将如何解决它。你有

    我将在中使用meet,并将带约束的等式分为两部分:

    第1部分是

    第2部分是

    在这里,我将对它们进行划分,以便在两个部分中执行的计算数量大致相同(考虑到约束条件)

    现在迭代第一部分,并将所有内容存储在字典中。然后迭代第二个,并检查字典中是否存在答案。如果是,您找到了解决方案

    这将指数除以2,但需要内存



    这可能会帮助某人想出一个我找不到的更好的方法。

    当你对第一个公式(a、b和c)有一个解决方案时,你可以对所有其他公式使用完全相同的解决方案,只需将其余变量(d、e等)设置为0。哦,如果我使用了错误的术语,很抱歉。我该怎么称呼它?@Amit一旦我们(在任何步骤)找到解决方案,我们就可以停止这个过程。我将把这些信息编辑成问题。如果我是对的,这个问题属于“整数线性规划”这一类,这是众所周知的NP难问题。因此,没有希望找到一个快速的(多项式)解。你给出的数学答案包含了一个非常有用的见解,它允许
    O(1)
    在某些情况下确定没有解。因为必须是
    GCD(系数列表)除以k
    ,并且项在增加。这意味着
    k
    必须小于或等于第一项(最小项),才能存在解。这意味着,无论对
    4*a+…=84
    。在这里,GCD必须介于
    1和4(包括)之间
    ,但这太低了,无法被
    84
    @nularman a、b、c整除。。。可以为零,因此附加项可能会出现一个解决方案。例如,
    4*0+5*0+…+84*1=84
    我很难理解如何在这里应用GCD。例如,如果方程为
    3a+8b=10
    ,则3和8的GCD将为1,即除以10,这意味着在没有解的情况下会有解。我做错什么了吗?@AtteJuvonen:你混淆了划分的定义。在你的例子中,
    GCD(3,8)/10=0.1
    ,0.1不是整数,所以1不除以10。我承认,如果选项为零,我所说的实际上只意味着你可以快速消除(将系数设置为0,并保留它)任何低于目标的项。因此,在您的示例中,只有在
    84x=84
    时才需要开始测试系数。此外,如果只考虑<代码> 3/10=0.3和8/10=0.8 < /代码>,则两者都不是整数。因此,在这种情况下,它们可以被忽略。