【问题标题】:Number of partition of `n` into sum of three squares (fast algorithm)将“n”划分为三个平方和的数量(快速算法)
【发布时间】:2019-04-19 12:17:59
【问题描述】:

几年前我发现了一个有趣的编程问题:
“找到n 的分区数为n < 10^9 和1 秒时间限制的三个平方之和。”

问题:有谁知道如何在给定的约束条件下解决这个问题?
我认为它可以纯粹用渐近时间复杂度比O(n) 快​​吗?是否有一些巧妙的数学方法或者是代码优化工程问题?

我在https://oeis.org/A000164 上找到了一些信息,但在公式部分中有一个O(n)-algo
(因为我们需要在 MAPLE 部分找到每个 n-k^2 数字的所有除数以计算 e(n-k^2))和 O(n)-algo。

【问题讨论】:

    标签: algorithm math number-theory


    【解决方案1】:

    是的。首先将数字n - z^2分解为素数,将素数分解为高斯共轭,并找到不同的表达式进行扩展和简化得到a + bi,然后可以将其提升为a^2 + b^2。我们可以排除任何候选 n - z^2 包含具有奇数幂的 4k + 3 形式的素数。

    这是基于将数字表示为高斯整数共轭。 (a + bi)*(a - bi) = a^2 + b^2。见https://mathoverflow.net/questions/29644/enumerating-ways-to-decompose-an-integer-into-the-sum-of-two-squareshttps://stackoverflow.com/a/54839035/2034787

    【讨论】:

    • 您是否建议分解每个 'sqrt(n)' 数字 'n - z^2' ?但是,如果我将每个 sqrt(n) 数字分解为 sqrt(n) 操作的平均值,我会得到 O(n) 时间,还是没有?
    • @DmitryPyatin 如果我们预先计算相关素数并仅测试每个候选素数的可分性怎么办?在我提到的 SO 问题上,候选生成可能还有其他优化。
    • @DmitryPyatin oeis 中的公式很有趣。
    • 通过这种方式解决的问题是仅对小于 'n-z^2' 的素数 4k+1、4k+3 进行因式分解,并对余数进行启发式素数测试。
    猜你喜欢
    • 1970-01-01
    • 2013-08-30
    • 2013-05-15
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    相关资源
    最近更新 更多