решала на SPOJ задачу.условие: нужно задать кол - во проверок и 2 числа, между которыми программа будет искать и выводить простые числа.я совсем - совсем начинающий и сделала
программу неэффективную по времени.нашла чужое решение и попробовала разобраться в нём.в общем, всё понятно до последнего заполнения массива значениями False.можете объяснить, откуда там берутся такие нагромождения ‘%’, как вообще там всё работает?
from math import sqrt primes = [2] for i in range(3, 32000, 2): isprime = True cap = sqrt(i) + 1 for j in primes: if (j >= cap): break if (i % j == 0): isprime = False break if (isprime): primes.append(i) T = int(input()) output = "" for t in range(T): if (t > 0): output += "\n" M, N = (int(i) for i in input().split()) M = int(M) N = int(N) cap = sqrt(N) + 1 if (M < 2): M = 2 isprime = [True] * 100001 for i in primes: if (i >= cap): break if (i >= M): start = i * 2 else: start = M + ((i - M % i) % i) # вот здесь непонятно falseblock = [False] * len(isprime[start - M:N + 1 - M:i]) # и здесь тоже isprime[start - M:N + 1 - M:i] = falseblock # for i in range(M, N + 1): if (isprime[i - M] == True): output += str(i) + "\n" print(output[:-1])
p.s.начал мучить вопрос, а не тупая ли я, если такие вопросы возникают?может, тут написаны очевидные вещи и мне вообще следовало бы бросить это всё? хотя программировать понравилось