Что не так с диапазоном j? - PullRequest
0 голосов
/ 27 февраля 2019

Это мой первый код на python, и я совершенно не могу понять, почему код в 5-й строке должен содержать math.sqrt(i))+1 вместо math.sqrt(i), потому что в противном случае квадраты простых чисел добавляются к результату.
Как решить это самый простой и естественный способ?Спасибо всем заранее

import math
n=int(input("Print n: "))
prime_list=list(range(2,n))
for i in range(2,n):
    for j in range (2, math.ceil(math.sqrt(i))+1):
        if i % j == 0:
            try:
                prime_list.remove(i)
            except:
                j+=1
        continue

print(prime_list)

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Это потому, что это Python.

В Python синтаксис range(x, y) генерирует последовательность

x, x+1, x+2, ..., y-2, y-1

Так что, если вы хотите, чтобы значение было включено в диапазон, второеПараметр должен быть больше, чем значение (не равно), и поэтому вы должны использовать math.floor(...) + 1 и не можете пропустить часть +1.В противном случае, когда я являюсь квадратом простого числа, j не будет проходить итерацию по этому простому числу, вызывая ошибку, с которой вы столкнулись.

0 голосов
/ 27 февраля 2019

Вам нужно j, чтобы пройти весь путь до i.Помните, что диапазон Python не включает значение терминала.

Например, range(2, 7) не включает 7.Чтобы найти, что 49 не простое число, вам нужно range(2, 7+1), так что j примет значение 7.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...