Форум сайта python.su
0
решала на 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])
Офлайн
857
luminoforestЗачем в этом разбираться? Писал какой-то индус очередной.
можете объяснить, откуда там берутся такие нагромождения ‘%’, как вообще там всё работает?
luminoforestДа не надо по этим заданиям заниматься, они в общей массе ничему полезному не учат. Это олимпиадные задачки, которые нужны только для понтов, а не для дела. Бери вузовские лабораторные работы, они сформированы определённым образом, и проходи их полностью. У них задача - именно навыки развить, которые нужны будут потом и на которые потом времени не будет.
p.s.начал мучить вопрос, а не тупая ли я, если такие вопросы возникают?
Отредактировано py.user.next (Авг. 17, 2017 14:25:47)
Офлайн