
Домашние задания: Информатика
на python
Помогите с информатикой

А что тут решать, применяем решето Эратосфена, да и дело с концом.
Подробно:
Определяем функцию, возвращающую массив флагов, позволяющий понять, является ли простым нечётное число в интервале от 5 до переданного в функцию значения (числа до 5 и чётные числа проверяются вручную, чтобы не держать лишних флагов).
Вводим количество чисел (непонятно, зачем нужное) и сами числа. Проверяем входные данные.
Получаем флаги до максимального числа из списка.
Для наглядности определяем функцию проверки простоты: первое условие вернёт True для 2 и 3, а второе - простоту числа для чисел, больших, чем 3.
Дальше фильтруем список, оставляя только простые числа, и материализуем результат фильтрации (последнее нужно из-за нелепого условия задачи выводить 0, если простых чисел не нашлось).
Печатаем список или 0.
Конечно, алгоритм ещё оптимизировать и оптимизировать: вместо двух пробегов по списку (максимум и простота) хватило бы одного, флаги в виде списка boolean - разбазаривание памяти, и числа больше миллиарда так не проверишь (Питон не даст создать список), sqrt можно было бы подменить быстрой целочисленной аппроксимацией, цикл по числам преобразовать в цикл по индексам, но для учебной задачи важнее простота кода, так что и такая версия пойдёт.
from math import sqrt
def toindex(i: int): return i // 2 - 2
def eratosthenes(end):
prime = [True] * toindex(end)
for j in range(9, end, 6): prime[toindex(j)] = False
for i in range(5, int(sqrt(end)) + 1, 2):
if not prime[toindex(i)]: continue
for j in range(i * i, end, i * 2): prime[toindex(j)] = False
return prime
N = int(input())
if N 10000: raise ValueError("Количество чисел за пределами диапазона")
numbers = list(map(int, input().split()))
if len(numbers) != N: raise ValueError("Введено неверное количество чисел")
ISPRIME = eratosthenes(max(numbers) + 1)
def isprime(n): return (n & -2) == 2 or (n > 3 and n % 2 == 1 and ISPRIME[toindex(n)])
primes = list(filter(isprime, numbers))
print(*primes if len(primes) > 0 else [0])
Подробно:
Определяем функцию, возвращающую массив флагов, позволяющий понять, является ли простым нечётное число в интервале от 5 до переданного в функцию значения (числа до 5 и чётные числа проверяются вручную, чтобы не держать лишних флагов).
Вводим количество чисел (непонятно, зачем нужное) и сами числа. Проверяем входные данные.
Получаем флаги до максимального числа из списка.
Для наглядности определяем функцию проверки простоты: первое условие вернёт True для 2 и 3, а второе - простоту числа для чисел, больших, чем 3.
Дальше фильтруем список, оставляя только простые числа, и материализуем результат фильтрации (последнее нужно из-за нелепого условия задачи выводить 0, если простых чисел не нашлось).
Печатаем список или 0.
Конечно, алгоритм ещё оптимизировать и оптимизировать: вместо двух пробегов по списку (максимум и простота) хватило бы одного, флаги в виде списка boolean - разбазаривание памяти, и числа больше миллиарда так не проверишь (Питон не даст создать список), sqrt можно было бы подменить быстрой целочисленной аппроксимацией, цикл по числам преобразовать в цикл по индексам, но для учебной задачи важнее простота кода, так что и такая версия пойдёт.
Тут надо то всего сделать небольшую достаточно простую функцию для проверки целого числа на простоту по методу Леонарда Фибоначчи (то есть простым перебором потенциальных делителей числа до √N включительно):
Ещё одна нелепость - это введение значения числа N, без чего вполне можно обойтись, так как компьютер и так будет знать сколько и чего в него ввелось при вводе данных.
def prime(n):
if n < 2: return False
if n == 2 or n == 3: return True
if n % 2 == 0: return False
for i in range(3, int(n**0.5) + 1, 2):
if n % i == 0: return False
return True
N, A = int(input()), [int(i) for i in input().split()]
B = [a for a in A if prime(a)]
if len(B): print(*B)
else: print(0)
И не нужны здесь никакие эратосфеновские сито, которые сами по себе отнюдь не приводят ни к каким оптимальным вариантам решения данной конкретной задачи, - это всё просто дурость в чистом виде! Серьёзная оптимизация кода может действительно потребоваться только для гигантских чисел, начиная примерно с тринадцати- или четырнадцатизначных (а если программа выполняется смартфоном, то, может быть, для уже начиная с двенадцатизначных), а если таких чисел нет, то и говорить даже не о чем - и так всё прекрасно будет работать!
пайтон изучай пригодится
Владимир Барабанов
буду изучать, но помогите с решением
Похожие вопросы
- Помогите с информатикой
- помогите с информатикой 11 класс
- Помогите по информатике
- Пожалуйста,помогите с Информатикой 10кл, с пояснением. Благодарю заранее.
- ПОМОГИТЕ С ИНФОРМАТИКОЙ 9 КЛАСС!
- Помогите с информатикой
- помогите с информатикой, на десять раз учебник прочитала, понять не могу, кто, какое место занял.
- Помогите сделать информатику
- Помогите с информатикой, составить программу
- Помогите с информатикой 7 класс.