2014-10-02 3 views
2
def f(num): 
    return num 

number = f(13195) 
list = [ x for x in range(number) if ((x!= 0 and x!=1) and number%x ==0)] #x (the multiplication factor) should not be 0 or 1 
max = max(list) 
for num in range(1,max) : 
    if all(num%i!=0 for i in range(2,num)): 
     if num in list: 
      print num 

Здравствуйте, этот код используется для поиска самого большого числа чисел. Я пробовал использовать f (13195), и я нашел правильные цифры, но я получил ошибку слишком много элементов в диапазоне, есть ли другой способ решения этого?Найти наибольшее количество чисел [Python]

Но когда я набрал 600851475143, он говорит, что у диапазона слишком много предметов, однако, означает ли это, что я не должен использовать диапазон? Заранее спасибо !

+1

Вы пробовали xrange? – lejlot

+0

@lejlot привет, я новичок. Я проверю это сейчас! :) –

+0

@lejlot Я попытался, однако, номер все еще слишком велик, он показывает еще одну ошибку. –

ответ

2

Вместо этого вы можете использовать xrange(number).

Однако цикл будет занимать очень много времени для большого числа

В качестве альтернативы использовать Python3 где range ведет себя как xrange

+0

теперь говорит, что Python int слишком большой, чтобы преобразовать в C длинный, позвольте мне заглянуть в него. –

+0

Это не работает, не знаю, как это исправить, можете ли вы мне помочь? Благодаря! –

0
import math 
def f(num): 
    return num 

number = f(600851475143) 
list = [ x for x in xrange(int(math.sqrt(number))) if ((x!= 0 and x!=1) and number%x ==0)] 
max = max(list) 
for num in xrange(1,max) : 
    if all(num%i!=0 for i in xrange(2,num)): 
     if num in list: # if sth is true it runs... 
      print num 

Я понял это, мы должны изменить диапазон до квадратно корень из числа, я изменил алгоритм, а не пытался найти какой-то диапазон больше, чем xrange в python.

Подробнее здесь: Если вам интересно :) «второй ответ» Why do we check up to the square root of a prime number to determine if it is prime?