【发布时间】:2012-02-09 11:28:00
【问题描述】:
这是一个“真正的”任务吗,可以用任何语言编写(例如 C/C++)
那么,我的任务是“生成”长度超过 50 位(最大值 = 200)的随机数?
然后,我必须在素性测试中检查这个数字。
那么,这个任务是“真实的”吗?它会消耗多少时间/资源?
另一种方法是从特殊类生成素数梅森数或其他数(可以使用哪个类?)
【问题讨论】:
-
你所说的“真实”是什么意思?你问我们这是不是家庭作业?你应该知道...
-
证明一个数是素数是非常困难的(嗯,微不足道但非常非常慢)。 GMP(GNU 多精度算术库)有一个可能的素数函数,它可以运行测试(你可以告诉它有多少 iirc)来告诉你一个数字是否“可能”是素数。 gmplib.org/manual/… 使用起来有点麻烦,因为它本来就是 C 语言,但你可以在 c++ 中很好地使用它。
-
'real' - 任务,只需要一台电脑,耗时不是一个小时。个人使用,是的。
-
@BoBTFish:这不是真的。确定给定数是否为素数可以在多项式时间内完成,(算法)[primes.utm.edu/prove/prove4_3.html] 由 Agrawal、Kayal 和 Saxena 于 2002 年提出。在实践中,我们使用概率 Rabin/Miller,这也很好,因为它也是多项式,只要 ERH 为真(大多数数学家都相信)。
-
@Krystian:他在哪里说不可能在多项式时间内完成?对于约 200 位数字,AKS 仍然困难且缓慢。
标签: c++ algorithm primality-test