Top.Mail.Ru
Ответы

Помогите решить задачу по информатике

Вася решил поучаствовать в школьной лотерее. Для этого ему нужно выбрать простое число до 50, но он их совсем не помнит.
Выведи все простые числа до 50. Переходи на новую строку при начале нового десятка (то есть, простые числа до 10 должны быть на первой строчке, а от 10 до 20 — на второй, и т.д.).

По дате
По Рейтингу
Аватар пользователя
Новичок

Генерируем числа-кандидаты по кольцу (2-3 вполне хватит, но если совсем заморачиваться, то можно сделать и 2-3-5-7). И проверяем делимость.
А для вывода используем генератор с побочным эффектом, который отмечает пройденные десятки - так удастся соблюсти линейную сложность.

123456789101112131415
 def genp(N):
    yield 2; yield 3
    for c in range(5, N + 1, 6):
        yield c; yield c + 2

def check(c, primes):
    for p in primes:
        if p * p > c: return True
        if c % p == 0: return False
    return True

PRIMES = []
PRIMES.extend(c for c in genp(50) if check(c, PRIMES))
b = STEP = 10
print(' '.join(('' if n < b else (b := b + STEP, '\n')[1]) + "{:2}".format(n) for n in PRIMES)) 
Аватар пользователя
Профи

А на каком языке нужно это сделать?
Или нужен псевдокод?