Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 14, 2020 13:22:13

AndreyNill
Зарегистрирован: 2020-05-25
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Как ускорить код?

Здравствуйте! Написал код по поиску простого числа, на сайте, для которого он написан, не проходит по времени и прерывается. Как мне отредактировать данный код, чтобы не было данной проблемы?


  import math
import random
def is_prime(n):
    if n % 2 == 0 and n > 2:
        return False
    return all(n % i for i in range(3, int(math.sqrt(n)) + 1, 2))
k = int(input())
number = 2
i = 0
while True:
    if is_prime(number):
        i += 1
        if i == k:
            break
    number += 1
print(number)

Офлайн

#2 Июнь 14, 2020 13:39:41

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Как ускорить код?

э-э-э а вы уверены что ваш код вообще работает правильно? Я вот запустил его, ввел 4 а мне ваша программа выдала 7. WTF?
по теме есть туева хуча статей, почитайте например вот эту https://habr.com/ru/post/122538/



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#3 Июнь 14, 2020 13:42:53

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Как ускорить код?

а что вообще вы делаете?

 k = int(input())
number = 2
i = 0
while True:
    if is_prime(number):
        i += 1
        if i == k:
            break
    number += 1
print(number)
представьте я введу в k число 24. это не простое число. значить условие
if is_prime(number) не выполниться никогда и мы получаем бесконечный цикл. но в функцию вы подаете number который равен 2 и условие if n % 2 == 0 верно значить функция вернет фальш и мы опять получаем бесконечный цикл

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version