Ruby |设计数学?

时间:2012-05-08 09:41:21

标签: ruby math primes

情况:

  • 我正在编写一个解决素数的程序。我需要解决4x ^ 2 + y ^ 2 = n的问题,其中n是已知变量。
  • 是的,它必须是Ruby。
  • 我很乐意花很多时间在这个项目上。
  • 我最好自己编写方程式的求解算法,并将其作为该项目的一部分。

我真正喜欢的是什么:

  • 如果有人能够提供指南,网站或歧义的链接,有关构建与解决代数方程有关的正式算法,或者向我提供似乎你读者的信息< / em>它会帮助我完成任务。
  • 请不要建议我使用其他语言。如果在回答之前你接受我真的非常想做到这一点,我也将不胜感激。该项目没有范围或时间限制,也不是为了盈利。这是为了我自己的教育。

注意:

  • 我不是直接反对为Ruby实现和使用已经存在的数学库/模块/东西,但另一种方式对我来说更好。

结束评论:

问题是我知道如何用手/计算器解决这些方程,但我不知道如何在代码中解决它们。

2 个答案:

答案 0 :(得分:2)

我想你正在实施阿特金筛选。在这种情况下,您实际上并没有求解等式。查看original paper的实际算法。

答案 1 :(得分:2)

由于您似乎正在尝试实现Sieve of Atkin,因此您可能也意识到4x ^ 2 + y ^ 2 = n只是三个方程式中的第一个。我不想破坏你的乐趣,因此下面只是实现那个。如果你遇到困难,只需评论这个答案,我会回复你。

max = 100
primes = Array.new(max + 1) { false }
sqrt = Math.sqrt(max)
1.upto(sqrt) do |x|
  1.upto(sqrt) do |y|
    n = 4 * x**2 + y**2
    primes[n] ^= true if n <= max && (n % 12 == 1 || n % 12 == 5)
  end
end