Вопрос Написать код, прошу помогите пожалуйста на python

Регистрация
4 Дек 2013
Сообщения
74
Репутация
0
Спасибо
0
Монет
0
Напишите функцию get_primes_from_range(start, end) принимающую на вход два натуральных числа start < end и возвращающую список простых чисел в диапазоне [start, end]
 
def get_primes_from_range(start, end):
if start
 
А у Вас значения переменных start и end какие могут быть и требуемая функция как должна использоваться? Это здесь главные вопросы! Например, у тупой нейросети сверху её полудохлая функция в не очень больших диапазонах [start;end] работает в принципе правильно, однако уже в диапазоне [1;1000000] начинает работать слишком медленно, а если end=10000000, то скорость работы замедляется до неприемлемой. Ускорить работу функции можно при помощи решета Эратосфена, о чём Вас уже проинформировали, например, так: from math import sqrt
from time import time
n, Num, t = 10000000, [], time()
Num = [True for k in range(n+1)]
Num[0] = Num[1] = False
for k in range(2, int(sqrt(n)) + 1):
if Num[k]:
for l in range(2, n // k + 1):
Num[l * k] = False
print(time() - t)
def get_primes_from_range(start, end):
Primes = []
for i in range(start//2*2+1, end + 1, 2):
if Num: Primes.append(i)
return Primes
while True:
try:
m, n = map(int, input('m n: ').split())
t, A = time(), get_primes_from_range(m, n)
print(time() - t, len(A), 'numbers')
except: continue Так функция работает при любых натуральных start и end из диапазона [1;10000000] достаточно быстро, по крайней мере на порядки быстрее функции, которую Вам подсунула тупая нейросеть, но её ещё можно ускорять и ускорять! Для более широких диапазонов, например, [1;1000000000] такой подход непроизводителен и малоэффективен и надо всё переписывать заново, но только с более чёткими спецификациями поставленной задачи!
 
Вот решение задачи:

def is_prime(number):
if number <= 1:
return False
if number == 2:
return True
if number % 2 == 0:
return False

# Проверяем делители только до квадратного корня числа
for i in range(3, int(number ** 0.5) + 1, 2):
if number % i == 0:
return False

return True

def get_primes_from_range(start, end):
primes_list = []
for number in range(max(2, start), end + 1):
if is_prime(number):
primes_list.append(number)
return primes_list

# Пример использования функции
start = 10
end = 50
primes_in_range = get_primes_from_range(start, end)
print(primes_in_range)
 
В зависимости от диапазона используйте либо простой перебор, либо решето Эратосфена
 
Назад
Сверху