程序计算Primes的日志

时间:2011-11-14 07:42:44

标签: python math

数学规则表明我的“程序”给出了错误的答案。

如果您能查看这小段代码并告诉我它的问题,我将非常感激。我知道问题出现在行ll = []之后的某个地方。我无法确切地指出它的确切原因。但我知道小于n的所有素数的对数之和小于n 。我的程序违反了这条规则。

以下是代码:

from math import log
lp = [] ## create a list
for n in range(2,10000):
    for x in range(2,n):
        if n % x == 0:
            break
    else:
        lp.append(n) ## fill that list with the primes
##print lp[500] found the value of lp[500]
ll = [] ## create a second list
for i in range(2, lp[500]):
        if i < 3581: ## this is the number corresponding to lp[500]
            i = log(i, )
            ll.append(i) ## fill the second list with logs of primes
print sum (ll), 3581, sum(ll)/3581`

5 个答案:

答案 0 :(得分:6)

您的第二个列表不仅包含素数日志,还包含2和lp[500]之间所有整数的日志。

答案 1 :(得分:1)

这是错误的:

for i in range(2, lp[500]): ## Gives all numbers from 2 to lp[500]
    if i < 3581:
        i = log(i, ) ## this changes i which is your loop variable!
        ll.append(i)

应该是:

for i in range(501): ## from 0 to 500
  ll.append( log(lp[i],) )

答案 2 :(得分:1)

你的范围表达

for i in range(2, lp[500]):

扩展为lp(不包括)的2到500个元素的所有数字。

使用

for i in lp:

应该产生正确的结果。

答案 3 :(得分:0)

我认为i=log(i,)将使用自然对数(e),您可能对log10(i)感兴趣(log = 10)。 见http://docs.python.org/library/math.html第9.2.2节

答案 4 :(得分:0)

Build in doc说:

>>> from math import log
>>> log?
Type:       builtin_function_or_method
Base Class: <type 'builtin_function_or_method'>
String Form:<built-in function log>
Namespace:  Interactive
Docstring:
log(x[, base])

Return the logarithm of x to the given base.
If the base not specified, returns the natural logarithm (base e) of x.