Я хотел бы генерировать простые числа от 2 до 100 в PYTHON [duplicate]

Оператор == проверяет, указывают ли две ссылки на один и тот же объект или нет. .equals() проверьте фактическое содержимое строки (значение).

Обратите внимание, что метод .equals() принадлежит классу Object (суперкласс всех классов). Вам необходимо переопределить его в соответствии с вашим требованием к классу, но для String оно уже реализовано и проверяет, имеет ли две строки одно и то же значение.

  • Случай 1
    String s1 = "Stack Overflow";
    String s2 = "Stack Overflow";
    s1 == s2;      //true
    s1.equals(s2); //true
    
    Причина: строка литералы, созданные без нуля, хранятся в пуле строк в области перментонов кучи. Таким образом, оба s1 и s2 указывают на один и тот же объект в пуле.
  • Случай 2
    String s1 = new String("Stack Overflow");
    String s2 = new String("Stack Overflow");
    s1 == s2;      //false
    s1.equals(s2); //true
    
    Причина. Если вы создаете объект String с использованием ключевого слова new, ему выделяется отдельное пространство в куче.
14
задан Peter Mortensen 24 October 2017 в 21:59
поделиться

29 ответов

Вам нужно проверить все числа от 2 до n-1 (до sqrt (n) на самом деле, но нормально, пусть это будет n). Если n делится на любое из чисел, оно не является простым. Если число является простым, распечатайте его.

for num in range(2,101):
    prime = True
    for i in range(2,num):
        if (num%i==0):
            prime = False
    if prime:
       print num

Вы можете написать то же намного короче и больше pythonic:

for num in range(2,101):
    if all(num%i!=0 for i in range(2,num)):
       print num

Как я уже сказал, было бы лучше проверить делители не от 2 до n -1, но от 2 до sqrt (n):

import math
for num in range(2,101):
    if all(num%i!=0 for i in range(2,int(math.sqrt(num))+1)):
       print num

Для небольших чисел, таких как 101, это не имеет значения, но для 10 ** 8 разница будет действительно большой.

Вы можете улучшить его немного больше, увеличивая диапазон, который вы проверяете на 2, и тем самым проверяете нечетные числа. Так же:

import math
print 2
for num in range(3,101,2):
    if all(num%i!=0 for i in range(2,int(math.sqrt(num))+1)):
       print num

Отредактировано:

Как и в первом цикле, выбраны нечетные числа, во втором цикле нет необходимости проверять четными числами, поэтому 'i 'может начинаться с 3 и пропускаться на 2.

import math
print 2
for num in range(3,101,2):
    if all(num%i!=0 for i in range(3,int(math.sqrt(num))+1, 2)):
        print num
39
ответ дан Community 15 August 2018 в 20:38
поделиться
  • 1
    Отличная работа, но почему вы игнорируете номер 1? Одно не считается простым числом. Пожалуйста, просмотрите эту статью primes.utm.edu/notes/faq/one.html – Mouneer 4 July 2015 в 18:38
  • 2
    Измените range(1,101) на range(2,101), и код будет идеальным. Давайте не будем забывать, что 1 не является простым. – Akash Adhikari 1 November 2017 в 14:24

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

import math
Primes_Upto = 101
Primes = [2]
for num in range(3,Primes_Upto,2):
    if all(num%i!=0 for i in Primes):
       Primes.append(num)
for i in Primes:
    print i
0
ответ дан Arif awate 15 August 2018 в 20:38
поделиться

Самый быстрый & amp; наилучшая реализация пропусков простых чисел:

def PrimeRanges2(a, b):
    arr = range(a, b+1)
    up = int(math.sqrt(b)) + 1
    for d in range(2, up):
        arr = omit_multi(arr, d)
0
ответ дан Dunedan 15 August 2018 в 20:38
поделиться

Вот другой подход, который торгует пространство для более быстрого поиска. Это может быть быстрее всего.

import math

def primes(n):
    if n < 2:
        return []
    numbers = [0]*(n+1)
    primes = [2]
    # Mark all odd numbers as maybe prime, leave evens marked composite.
    for i in xrange(3, n+1, 2):
        numbers[i] = 1

    sqn = int(math.sqrt(n))
    # Starting with 3, look at each odd number.
    for i in xrange(3, len(numbers), 2):
        # Skip if composite.
        if numbers[i] == 0:
            continue
        # Number is prime.  Would have been marked as composite if there were
        # any smaller prime factors already examined.
        primes.append(i)
        if i > sqn:
            # All remaining odd numbers not marked composite must be prime.
            primes.extend([i for i in xrange(i+2, len(numbers), 2)
                           if numbers[i]])
            break
        # Mark all multiples of the prime as composite.  Check odd multiples.
        for r in xrange(i*i, len(numbers), i*2):
            numbers[r] = 0

    return primes

n = 1000000
p = primes(n)
print "Found", len(p), "primes <=", n
0
ответ дан gammazero 15 August 2018 в 20:38
поделиться
min=int(input("min:"))
max=int(input("max:"))
for num in range(min,max):
    for x in range(2,num):
        if(num%x==0 and num!=1):
            break
        else:
            print(num,"is prime")
            break
0
ответ дан Gurvinder Singh 15 August 2018 в 20:38
поделиться
  • 1
    Не могли бы вы подробнее рассказать о своем ответе, добавив немного подробного описания вашего решения? – abarisone 19 June 2015 в 07:09

Вы заканчиваете цикл слишком рано. После того, как вы проверили все возможности в теле цикла for, а не сломались, число будет простым. Поскольку одно не простое, вам нужно начинать с 2:

for num in xrange(2, 101):
    for i in range(2,num):
        if not num % i:
            break
    else:
        print num

. В более быстром решении вы пытаетесь разделить на простые числа, которые меньше или равны корню числа, которое вы тестируете. Это может быть достигнуто путем запоминания всех простых чисел, которые вы уже нашли. Кроме того, вам нужно только проверить нечетные числа (кроме 2). Вы можете поместить полученный алгоритм в генератор, чтобы вы могли использовать его для хранения простых в контейнере или просто распечатывать их:

def primes(limit):
    if limit > 1:
        primes_found = [(2, 4)]
        yield 2
        for n in xrange(3, limit + 1, 2):
            for p, ps in primes_found:
                if ps > n:
                    primes_found.append((n, n * n))
                    yield n
                    break
                else:
                    if not n % p:
                        break

for i in primes(101):
    print i

Как вы можете видеть, нет необходимости вычислять квадратный корень, быстрее хранить квадрат для каждого простого числа и сравнивать каждый делитель с этим числом.

10
ответ дан hochl 15 August 2018 в 20:38
поделиться
  • 1
    вот страница из документа python, описывающая break / continue, с примером печати простых чисел! docs.python.org/tutorial/controlflow.html (раздел 4.4) – kaveman 23 July 2012 в 21:26
  • 2
    Нет, вы ошибаетесь, конечно. continue здесь не поможет. Пожалуйста, напишите решение wit continue, если вы считаете, что правы – Igor Chubin 23 July 2012 в 21:32
  • 3
    +1. за исключением того, что 1 не является простым. :) – Will Ness 24 July 2012 в 15:29

Печать n простых чисел с использованием python:

num = input('get the value:')
for i in range(2,num+1):
    count = 0
    for j in range(2,i):
        if i%j != 0:
            count += 1
    if count == i-2:
        print i,
0
ответ дан htoniv_91 15 August 2018 в 20:38
поделиться

Я сторонник того, чтобы не принимать лучшее решение и тестировать его. Ниже приведены некоторые изменения, которые я сделал для создания простых классов примеров, как с помощью @ igor-chubin, так и с @ user448810. Прежде всего позвольте мне сказать, что это отличная информация, спасибо вам, ребята. Но я должен признать @ user448810 за его умное решение, которое оказалось самым быстрым на сегодняшний день (из тех, что я тестировал). Так тебе, сэр! Во всех примерах я использую значения 1 миллион (1 000 000) в виде n.

Пожалуйста, не стесняйтесь попробовать код.

Удачи!

Метод 1, описанный Игорем Чубиным:

def primes_method1(n):
    out = list()
    for num in range(1, n+1):
        prime = True
        for i in range(2, num):
            if (num % i == 0):
                prime = False
        if prime:
            out.append(num)
    return out

Тест: более 272 секунд

Метод 2 как описано Игорем Чубиным:

def primes_method2(n):
    out = list()
    for num in range(1, n+1):
        if all(num % i != 0 for i in range(2, num)):
            out.append(num)
    return out

Контрольный показатель: 73.3420000076 секунд

Метод 3, описанный Игорем Чубиным:

def primes_method3(n):
    out = list()
    for num in range(1, n+1):
        if all(num % i != 0 for i in range(2, int(num**.5 ) + 1)):
            out.append(num)
    return out

Контрольный показатель: 11.3580000401 секунд

Метод 4, описанный Игорем Чубиным:

def primes_method4(n):
    out = list()
    out.append(2)
    for num in range(3, n+1, 2):
        if all(num % i != 0 for i in range(2, int(num**.5 ) + 1)):
            out.append(num)
    return out

Контрольный показатель: 8.7009999752 секунд

Метод 5, как описано пользователем448810 (что, по моему мнению, было довольно умно):

def primes_method5(n):
    out = list()
    sieve = [True] * (n+1)
    for p in range(2, n+1):
        if (sieve[p]):
            out.append(p)
            for i in range(p, n+1, p):
                sieve[i] = False
    return out

Benchmark: 1.12000012398 секунд

Примечания: Решение 5, указанное выше (как было предложено пользователем448810), оказалось самым быстрым и честным тихим творческим и умным. Я люблю это. Спасибо, ребята !!

EDIT: О, и, кстати, я не чувствовал необходимости импортировать математическую библиотеку для квадратного корня из значения, поскольку эквивалент просто (n ** 0,5). В противном случае я не редактировал много других, а затем возвращал значения в массив и возвращал массив. Кроме того, было бы, вероятно, немного более эффективно хранить результаты в файле, чем подробные, и могло бы сэкономить много на памяти, если бы это было просто по одному, но стоило бы немного больше времени из-за записи на диск. Я думаю, что всегда есть место для улучшения. Так что, надеюсь, код имеет смысл.

4
ответ дан jacktrader 15 August 2018 в 20:38
поделиться

Сначала мы находим коэффициент этого числа

def fac(n):
  res = []
  for i in range(1,n+1):
    if n%i == 0:
res.append(i)

Сценарий для проверки простого или нет

def prime(n):
return(fac(n) == [1,n])

Сценарий для печати всего простого числа до n

def prime_list(n):
  pri_list = []
  for i in range(1,n+1):
    if prime(i)
      pri_list.append(i)
return(pri_list)
0
ответ дан kamran kausar 15 August 2018 в 20:38
поделиться

Вот простейшая логика для начинающих, чтобы получить простые числа:

p=[]
for n in range(2,50):
    for k in range(2,50):
        if n%k ==0 and n !=k:
            break
        else:
            for t in p:
                if  n%t ==0:
                    break
            else:
                p.append(n)

print p
0
ответ дан Lorelorelore 15 August 2018 в 20:38
поделиться

Вот простая и интуитивно понятная версия проверки, является ли это простым в функции 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 секунд для его расчета. :)

0
ответ дан moldovean 15 August 2018 в 20:38
поделиться
  • 1
    есть 9592 простых числа ниже 100000 , и для его вычисления потребовался мой старый медленный ноутбук 0,01 секунды. не заглядывая в него, может быть, ваш алгоритм не оптимален. – Will Ness 8 September 2014 в 08:19
  • 2
    @WillNess, конечно, нет! Если вы хотите более эффективный алгоритм проверки: PG7.8 из ru.wikibooks.org/wiki/… Мой алгоритм - забавный, потому что любой может ПОЛУЧИТЬ его, почему он работает! :) – moldovean 10 September 2014 в 20:29
  • 3
    Я видел эту страницу, и это ... не хорошо. его алгоритм неэффективен. Он изобретает оптимизацию колес, но использует его с пробным делением вместо сита Эратосфена, который намного, намного, намного быстрее. - о вашем первом коде: с одной небольшой коррекцией он работает в 1,3 секунды на Ideone (что примерно в 3 раза медленнее, чем ваш i7 - так, 100x speedup!) и конвертируется в цикл вместо рекурсии - 0.77 сек. Вам просто нужно переписать три символа в вашем коде. :) – Will Ness 10 September 2014 в 23:51
  • 4
    Рекурсивные функции - это весело, хотя ... :) Я подумаю, как улучшить его, – moldovean 11 September 2014 в 12:35
  • 5
    Я дам вам еще один намек: все три персонажа вместе, один рядом друг с другом. Просто введите что-то новое, заменив их тремя новыми персонажами. – Will Ness 11 September 2014 в 13:03
f=0
sum=0
for i in range(1,101):
    for j in range(1,i+1):
        if(i%j==0):
            f=f+1
    if(f==2):
        sum=sum+i
        print i        
    f=0
print sum
0
ответ дан Monica Sai 15 August 2018 в 20:38
поделиться

Это пример программы, которую я написал, чтобы проверить, является ли число простым или нет.

def is_prime(x):
    y=0
    if x<=1:
        return False
    elif x == 2:
        return True
    elif x%2==0:
        return False
    else:
        root = int(x**.5)+2
        for i in xrange (2,root):
            if x%i==0:
                return False
                y=1
        if y==0:
            return True
0
ответ дан nymk 15 August 2018 в 20:38
поделиться

Добавление моей собственной версии, просто чтобы показать некоторые трюки itertools v2.7:

import itertools

def Primes():
    primes = []
    a = 2
    while True:
        if all(itertools.imap(lambda p : a % p, primes)):
            yield a
            primes.append(a)
        a += 1

# Print the first 100 primes
for _, p in itertools.izip(xrange(100), Primes()):
    print p
-1
ответ дан Peter Mortensen 15 August 2018 в 20:38
поделиться
for num in range(1,101):
    prime = True
    for i in range(2,num/2):
        if (num%i==0):
            prime = False
    if prime:
       print num
0
ответ дан Riyas PK 15 August 2018 в 20:38
поделиться
n = int(raw_input('Enter the integer range to find prime no :'))
p = 2
while p<n:
  i = p
  cnt = 0
  while i>1:
    if p%i == 0:
        cnt+=1
    i-=1
  if cnt == 1:
     print "%s is Prime Number"%p
  else:
     print "%s is Not Prime Number"%p
  p+=1
0
ответ дан Rohan Chavan 15 August 2018 в 20:38
поделиться
a=int(input('enter the lower no.'))
b=int(input('enter the higher no.'))
print("Prime numbers between",a,"and",b,"are:")
for num in range(a,b):

    if num>1:
        for i in range(2,num):
            if (num%i)==0:
                break
        else:
            print(num)
1
ответ дан Shwetank 15 August 2018 в 20:38
поделиться
  • 1
    Добро пожаловать в SO. Это сообщение не отвечает на вопрос OP, который должен был попросить о помощи, почему его / ее код не работал. Предложение альтернативного решения - это не одно и то же. Это тоже очень старый вопрос, и он получил одобренный ответ. См. stackoverflow.com/help/how-to-answer для руководства. – Nick 14 July 2018 в 16:08
# computes first n prime numbers
def primes(n=1):
    from math import sqrt
    count = 1
    plist = [2]
    c = 3
    if n <= 0 :
        return "Error : integer n not >= 0"
    while (count <= n - 1):    # n - 1 since 2 is already in plist
        pivot = int(sqrt(c))
        for i in plist:
            if i > pivot :    # check for primae factors 'till sqrt c
                count+= 1
                plist.append(c)
                break
            elif c % i == 0 :
                break    # not prime, no need to iterate anymore
            else :
                continue 
        c += 2    # skipping even numbers              
    return plist
0
ответ дан Soumik Bhattacharya 15 August 2018 в 20:38
поделиться
num= int(input("Enter the numbner"))
isDivisible= False
int=2

while i<num:
    if num%i==0
    isDivisible True
    print("The number {} is divisible by {}.".format(num,i))
    i +=1

if isDivisible:
    print("The number {} is not prime.".format(num))
else:
    print("The number {} is a prime number.".format(num))
0
ответ дан Srikanth Reddy 15 August 2018 в 20:38
поделиться
  • 1
    Вы можете добавить некоторые пояснения к своему коду :) – blue-phoenox 6 May 2018 в 10:10
  • 2
    Взять ввод от пользователя, затем инициализировать переменные isDivisible и i. Set isDivisible to False и i to 2. Затем запустите цикл while, где значение i должно быть меньше числа, которое было указано как вход. Затем используйте оператор modulo для проверки того, делится ли введенное число на значения num-1. Если да, то он отобразит номер и скажет, что это не простое число. Если он не делится ни на один из значений i на num-1, это простое число. – Srikanth Reddy 6 May 2018 в 11:50
def prime_number(a):
    yes=[]
    for i in range (2,100):
        if (i==2 or i==3 or i==5 or i==7) or (i%2!=0 and i%3!=0 and i%5!=0 and i%7!=0 and i%(i**(float(0.5)))!=0):
            yes=yes+[i]
    print (yes)
0
ответ дан Sush Kudari 15 August 2018 в 20:38
поделиться

Я был вдохновлен Игорем и сделал блок кода, который создает список:

def prime_number():

for num in range(2, 101):
    prime = True
    for i in range(2, num):
        if (num % i == 0):
            prime = False
    if prime and num not in num_list:
        num_list.append(num)
    else:
        pass
return num_list


num_list = []
prime_number()
print(num_list)
0
ответ дан Tortue Genial 15 August 2018 в 20:38
поделиться

Как насчет этого? Чтение всех предложений, которые я использовал:

prime=[2]+[num for num in xrange(3,m+1,2) if all(num%i!=0 for i in range(2,int(math.sqrt(num))+1))]

Основные номера до 1000000

root@nfs:/pywork# time python prime.py

78498

real 0m6.600s

пользователь 0m6.532s

sys 0m0.036s

2
ответ дан Tshilidzi Mudau 15 August 2018 в 20:38
поделиться

Ответ Игоря Чубина можно улучшить. При тестировании, если X является простым, алгоритм не должен проверять каждое число до квадратного корня из X, он должен проверять только простые числа до sqrt (X). Таким образом, он может быть более эффективным, если он ссылается на список простых чисел по мере его создания. Функция ниже выводит список всех простых чисел под b, что удобно в виде списка по нескольким причинам (например, когда вы хотите узнать количество простых чисел & lt; b). Проверяя простые числа, он экономит время при более высоких числах (сравните около 10 000, разница резко).

from math import sqrt
def lp(b)
    primes = [2]
    for c in range(3,b):
        e = round(sqrt(c)) + 1
        for d in primes:
            if d <= e and c%d == 0:
                break
        else:
            primes.extend([c])
    return primes
0
ответ дан user2636407 15 August 2018 в 20:38
поделиться
  • 1
    это неэффективно: для кандидата, который является простым, он посетит все предыдущие простые числа (и проверит их для d <= e). Цикл должен быть разбит всегда, после того, как был достигнут sqrt. – Will Ness 4 August 2013 в 19:11
  • 2
    или полностью удалить sqrt, поскольку это дорогостоящая операция и сравнить квадраты, то есть for d in primes: if d*d > c: ... – hochl 19 June 2015 в 10:34

Мой способ перечисления простых чисел на номер записи без лишних хлопот заключается в использовании свойства, которое вы можете получить любым числом, которое не является простым с суммированием простых чисел.

Поэтому, если вы разделите номер входа со всеми штрихами ниже него, и он нигде не делится ни на один из них, вы знаете, что у вас есть премьер.

Конечно, есть еще более быстрые способы получения простых чисел, но этот уже выполняется очень хорошо, особенно потому, что вы не делите номер записи на любое число, а достаточно всего простых чисел до этого числа.

С помощью этого кода мне удалось на моем компьютере перечислить все простые числа до 100 000 менее чем за 4 секунды.

import time as t

start = t.clock()

primes = [2,3,5,7]

for num in xrange(3,100000,2):
    if all(num%x != 0 for x in primes):
        primes.append(num)

print primes
print t.clock() - start
print sum(primes)
1
ответ дан user3604362 15 August 2018 в 20:38
поделиться

Вместо пробного разделения лучший подход, изобретенный греческим математиком Эратосфеном более двух тысяч лет назад, состоит в том, чтобы просеять, многократно изгоняя кратные простые числа.

Начните с составления списка всех чисел от 2 до максимального желаемого числа n. Затем многократно принимайте наименьшее непересекающееся число и вычеркивайте все его кратные числа; числа, которые остаются непересекающимися, являются просторными.

Например, рассмотрите числа, меньшие 30. Сначала 2 идентифицируется как простой, затем 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28 и 30 вычеркнуты. Следующие 3 обозначены как простые, затем 6, 9, 12, 15, 18, 21, 24, 27 и 30 вычеркнуты. Следующий штрих равен 5, поэтому 10, 15, 20, 25 и 30 вычеркнуты. И так далее. Цифры остаются неизменными: 2, 3, 5, 7, 11, 13, 17, 19, 23 и 29.

def primes(n):
  sieve = [True] * (n+1)
  for p in range(2, n+1):
    if (sieve[p]):
      print p
      for i in range(p, n+1, p):
        sieve[i] = False

Оптимизированная версия сита обрабатывает 2 отдельно и сита только нечетные числа. Кроме того, поскольку все композиты, меньшие квадрата текущего штриха, пересекаются меньшими штрихами, внутренний цикл может начинаться с p ^ 2 вместо p, а внешний цикл может останавливаться у квадратного корня n. Я оставлю оптимизированную версию для вас.

8
ответ дан user448810 15 August 2018 в 20:38
поделиться
  • 1
    +1 для обучения чему-то :) – Rob Wagner 24 July 2012 в 15:35
  • 2
    сито имеет довольно плохую производительность, я сомневаюсь, что это будет быстрее, чем попытка разделения, особенно если вы попробуете только до квадратного корня. – hochl 19 June 2015 в 10:51
  • 3
    @hochl, вы ошибаетесь; см. primesieve.org для контрпримера. – Will Ness 24 June 2015 в 22:31
  • 4
    Ничего себе, не знал этого - но его невероятно сложно и использует несколько ядер ... О, но интересно - спасибо! :) – hochl 25 June 2015 в 00:53
  • 5
    @hochl: Это не должно быть сложным. Используя оптимизированную версию сита, о которой я говорил выше, для вычисления простых чисел до миллиона требуется одна треть секунды. Использование соответствующего пробного подразделения занимает более двадцати раз. Код в ideone.com/5U2Wns . Код в primesieve.org сложнее, но намного быстрее. – user448810 25 June 2015 в 18:05

Использование функции фильтра.

l=range(1,101)
for i in range(2,10): # for i in range(x,y), here y should be around or <= sqrt(101)
    l = filter(lambda x: x==i or x%i, l)

print l
0
ответ дан user5319825 15 August 2018 в 20:38
поделиться
10
ответ дан hochl 5 September 2018 в 20:00
поделиться
2
ответ дан Tshilidzi Mudau 5 September 2018 в 20:00
поделиться
2
ответ дан Tshilidzi Mudau 29 October 2018 в 03:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: