Python: функция, возвращающая exec, ничего не возвращает [duplicate]

Вот простая и интуитивно понятная версия проверки, является ли это простым в функции RECURSIVE! :) (Я сделал это как домашнее задание для класса MIT). В python он работает очень быстро до 1900 года. Если вы попробуете более 1900, вы получите интересную ошибку :) (Хотелось бы проверить, сколько номеров компьютер может управлять?)

def is_prime(n, div=2):

    if div> n/2.0: return True

    if n% div == 0:
        return False
    else:
        div+=1
        return is_prime(n,div)

#The program:
until = 1000
for i in range(until):
    if is_prime(i):
        print i

Конечно ... если вам нравятся рекурсивные функции, этот маленький код может быть обновлен со словарем, чтобы серьезно увеличить его производительность и избежать этой смешной ошибки. Вот простой вариант обновления 1 уровня с интеграцией MEMORY:

import datetime
def is_prime(n, div=2):
    global primelist
    if div> n/2.0: return True
    if div < primelist[0]:
        div = primelist[0]
        for x in primelist:
            if x ==0 or x==1: continue
            if n % x == 0:
                return False
    if n% div == 0:
        return False
    else:
        div+=1
        return is_prime(n,div)


now = datetime.datetime.now()
print 'time and date:',now
until = 100000
primelist=[]
for i in range(until):
    if is_prime(i):
        primelist.insert(0,i)
print "There are", len(primelist),"prime numbers, until", until
print primelist[0:100], "..."

finish = datetime.datetime.now()
print "It took your computer", finish - now , " to calculate it"

Вот резули, где я напечатал последние 100 простых чисел.

время и дата: 2013-10-15 13: 32: 11.674448

Имеются 9594 простых чисел, до 100000

[99991, 99989, 99971, 99961, 99929, 99923, 99907, 99901, 99881, 99877, 99871, 99859, 99839, 99833, 99829, 99823, 99817, 99809, 99793, 99787, 99767, 99761, 99733, 99721, 99719 , 99713, 99709, 99707, 99689, 99679, 99667, 99661, 99643, 99623, 99611, 99607, 99581, 99577, 99571, 99563, 99559, 99551, 99529, 99527, 99523, 99497, 99487, 99469, 99439, 99431 , 99409, 99401, 99397, 99391, 99377, 99371, 99367, 99349, 99347, 99317, 99289, 99277, 99259, 99257, 99251, 99241, 99233, 99223, 99191, 99181, 99173, 99149, 99139, 99137, 99133 , 99131, 99119, 99109, 99103, 99089, 99083, 99079, 99053, 99041, 99023, 99017, 99013, 98999, 98993, 98981, 98963, 98953, 98947, 98939, 9892 9, 98927, 98911, 98909, 98899, 98897] ...

Для его вычисления потребовался ваш компьютер 0: 00: 40.871083

Так что для моего ноутбука i7 потребовалось 40 секунд для его расчета. :)

343
задан Mr Fooz 31 December 2012 в 06:03
поделиться