【发布时间】:2016-06-29 16:38:02
【问题描述】:
在我一直使用的两个算法中,我使用了两个函数:
- pi(n):=素数个数和
- R(n):=r,其中 prod(p_i,i=1,r) 但 n 其中 p_i 是第 i 个素数。
基本上 pi(n) 是著名的素数计数函数,R(n) 只是计算连续素数的乘积,直到到达界限 n 并返回使用的素数数量,例如:
R(12)=2 因为 2*312 和例如
R(100)=3 因为 2*3*5100。
我们一直在和我的教授讨论计算这些函数的运行时间。我知道 pi(n) 会随着时间的推移逼近 x/ln(x),但我对一些东西有疑问:
- 可以在多项式时间内计算 R(n) 吗?从我的角度来看,通过使用动态规划,我们可以通过知道 2*3*5*...*p_(i-1) 来计算乘积 2*3*5*...*p_i,因此问题简化为得到下一个素数,据我所知,它可以在多项式时间内计算出来(PRIMES 在 P 中)。
- 另外,因为我们知道我们可以确定一个数在多项式时间内是否为素数,这不应该意味着 pi(n) 可以在多项式时间内计算吗? (也可以使用动态编程)。
如果有人可以帮助我澄清这些问题或指出正确的方向,我将不胜感激!谢谢!
【问题讨论】:
-
当你说多项式时,你的意思是数 n 的多项式,还是表示 n 所需的位数?对于像因式分解这样的事情,我们通常指的是位数,这要困难得多。我的期望是 R(n) 是 n 表示大小的多项式,而 phi(n) 将类似于 O(sqrt(n))。
标签: algorithm time-complexity computation-theory space-complexity number-theory