【发布时间】:2011-02-14 04:59:33
【问题描述】:
我遇到了一个问题,将任何数字表示为四个素数之和。
条件:
- 不允许使用任何类型的数据库。
- 最长执行时间:3 秒
- 数字只到 100,000
- 如果无法拆分,则返回 -1
我做了什么:
使用 Eratosthenes 的筛子,我计算了所有素数,直到指定的数字。
查找了一个称为哥德巴赫猜想的概念,该猜想将偶数数表示为两个素数的总和。
但是,我被困在这之外。 任何人都可以帮助我了解您可能采取的方法吗?
Eratosthenes 的筛子需要两秒钟来计算最多 100,000 个素数。
【问题讨论】:
-
这显然对所有数字
-
来源:Creative Exersise 39,Java 编程简介,cs.princeton.edu/introcs/42sort
-
执行时间不仅仅与算法本身有关。它还取决于执行算法的机器。
-
我喜欢 LINQ;可惜它必须是c ++。 =)
var answer = from p in primes from q in primes from r in primes from s in primes where p + q + r + s == n where p <= q && q <= r && r <= s select new { p, q, r, s }; -
两秒对于筛子来说听起来有点太长了。要么你的机器特别慢,要么你做错了什么。