найти точные числа, которые имеют 3 делителя и меньше n (заданные пользователем)

#python

#python

Вопрос:

Я ученик 9-го класса, который только что изучил некоторые базовые алгоритмы в псевдокоде и попытался решить проблему на python. Пример. мне потребовалось найти числа, которые имеют 3 делителя и меньше n. что мне делать? вывода нет

[1]: https://i.stack.imgur.com/a69tA.png ** сильный текст**

 n=int(input("introduce a  nr"))
x=1
k=0
d=1
for x in range(1,n 1):
    for d in range(1,x 1):
        if x % d==0:
            k =1
        d =1
    if k==3:
      print(x)
    x =1
 

Комментарии:

1. Пожалуйста, укажите свой код в виде текста, а не изображений.

2. В чем смысл d =1 ? Цикл for автоматически увеличивается d . Также — обратите внимание, что вы не выполняете повторную инициализацию k для каждого прохода через внутренний цикл. Если вы просто переместитесь k=0 вниз на несколько строк (и с правильным отступом), вы получите совсем другой результат.

3. вы правы, извините, то же самое для x =1

4. это работает, спасибо, приятель

Ответ №1:

Основная проблема заключается в том, что вы не повторно инициализируете k beofre для каждого вызова внутреннего цикла. Другая проблема заключается в том, что вы не доверяете for циклам делать то, для чего они предназначены. Такие вещи, как d = 1 бессмысленны.

Работает следующий код:

 n=int(input("introduce a  nr: "))

for x in range(1,n 1):
    k = 0
    for d in range(1,x 1):
        if x % d==0:
            k =1
    if k==3:
      print(x)
 

Вывод (для n = 1000 ):

 4, 9, 25, 49, 121, 169, 289, 361, 529, 841, 961
 

Интересно, что это последовательность A001248 в онлайн-энциклопедии целочисленных последовательностей. Эта последовательность описывается как последовательность всех квадратов простых чисел. Легко видеть, что это еще один способ описания последовательности, которую вы пытаетесь найти.

Ответ №2:

Некоторые дополнительные, когда вы хотите знать, на какие числа его можно разделить: `

 #!/bin/env python3

n = int(input("introduce a  nr: "))
for x in range(1, n 1):
    diverders = []
    for d in range(1, x 1):
        if x % d == 0:
            diverders.append(d)

    if len(diverders) == 3:
        print(f'{x} can be devided by {diverders}')