Программа расчета логов простых чисел - PullRequest
3 голосов
/ 14 ноября 2011

Математическое правило показывает, что моя «программа» дает неправильный ответ.

Я был бы очень признателен, если бы вы могли проверить этот небольшой фрагмент кода и сообщить мне о проблеме с ним.Я знаю, что проблема где-то после строки 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 ]

6 голосов
/ 14 ноября 2011

Ваш второй список содержит не только журналы простых чисел, он содержит журналы всех целых чисел от 2 до lp[500].

1 голос
/ 14 ноября 2011

Ваше выражение диапазона

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

расширяется до всех чисел от 2 до 500-го элемента lp (эксклюзив).

Использование

for i in lp:

следуетдать правильный результат.

1 голос
/ 14 ноября 2011

Это неправильно:

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],) )
0 голосов
/ 14 ноября 2011

Построение в документе говорит:

>>> 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.
0 голосов
/ 14 ноября 2011

Я думаю, i=log(i,) будет использовать натуральный логарифм (е), где вас может заинтересовать log10(i) (журнал с основанием = 10).см http://docs.python.org/library/math.html раздел 9.2.2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...