Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 17, 2017 13:41:02

luminoforest
Зарегистрирован: 2017-08-17
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

простые числа


решала на 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.начал мучить вопрос, а не тупая ли я, если такие вопросы возникают?может, тут написаны очевидные вещи и мне вообще следовало бы бросить это всё? хотя программировать понравилось

Офлайн

#2 Авг. 17, 2017 14:24:09

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

простые числа

luminoforest
можете объяснить, откуда там берутся такие нагромождения ‘%’, как вообще там всё работает?
Зачем в этом разбираться? Писал какой-то индус очередной.
Задание самое обычное
http://www.spoj.com/problems/PRIME1/

luminoforest
p.s.начал мучить вопрос, а не тупая ли я, если такие вопросы возникают?
Да не надо по этим заданиям заниматься, они в общей массе ничему полезному не учат. Это олимпиадные задачки, которые нужны только для понтов, а не для дела. Бери вузовские лабораторные работы, они сформированы определённым образом, и проходи их полностью. У них задача - именно навыки развить, которые нужны будут потом и на которые потом времени не будет.



Отредактировано py.user.next (Авг. 17, 2017 14:25:47)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version