a = 5 a = int(a) b = 0 b = int(b) n = [] if a <= 1000: while b <= 1000: b = b + 1 if (a % b): continue; n.append(b) if len(n) == 2: print(a)
как зациклить код без багов?
Ps: не пешите сообщения в духе: зачем изобретать велосипед?
a = 5 a = int(a) b = 0 b = int(b) n = [] if a <= 1000: while b <= 1000: b = b + 1 if (a % b): continue; n.append(b) if len(n) == 2: print(a)
vadaДа вроде все отлично у вас циклится.
Когда начал зацикливать что то идёт не так
a = 19 # когда вы присвоили целое не нужно a=int(a) оно и так целое уже if a <= 1000: # перебирать до 1000 нет смысла делится на большее оно не сможет # range тут удобнее чем ручное увеличение переменной for b in range(2,a): if (a % b)==0: print(a, " делится на ",b) break # если хоть на чтото делится то уже не простое, дальше нет смысла перебирать else: print(a, " простое") # Если цикл завершился нормально то число простое
vadaА можешь рассказать что делает каждая строчка твоего кода?.Это кстати важно…
Если ошибка в алгоритме то укажите ошибку и я всмотрюсь в ваш код и сделаю по вашему алгоритму.
#число которое мы проверяем a = 5 #число которым мы пытаемся разделить а b = 0 #список n в который мы записываем делители (b) n = [ ] #я просто заранее ограничил а что бы потом зациклить if a <= 1000: #мы делим наше а в диапозоне от 0 до 1000 while b <= 1000: #постоянно обновляем b что бы искать новые и новые делители b = b + 1 #если а делиться на b то продолжаем если нет то начинаем опять цикл if (a % b): continue; #если делиться добавим делитель в список n n.append(b) #если в списке два делителя (ведь простое то которое делиться на 1 и на себя) if len(n) == 2: #то очищаем список (для цикла) n.clear() #и выводим простое число а print(a)
vadaТы ищешь все делители,еще и сохраняешь их,память тратишь,из-за этого алгоритм становится неэффективным.
Если ошибка в алгоритме то укажите ошибку и я всмотрюсь в ваш код и сделаю по вашему алгоритму.
vadaЕсли отбросить единицу и двойку,то все что вообще делится без остатка - уже не простое,вот и пиши алгоритм - число дели по порядку на 2,3,4,…N, как в коде который тебе показали
ведь простое то которое делиться на 1 и на себя
for b in range(2,a): if (a % b)==0: print(a, " делится на ",b) break # если хоть на чтото делится то уже не простое, дальше нет смысла перебирать
a = 10 b = 2 n = [ ] if a <= 1000: while b <= a: b = b + 1 #вот тут ты добавил 1 к b print(b) if (a % b): # а здесь стал проверять continue;
a = 6 b = 2 n = [ ] if a <= 1000: while b <= 10: print('b =', b, 'a/b =', a/b) b = b + 1
b = 2 a/b = 3.0 b = 3 a/b = 2.0 b = 4 a/b = 1.5 b = 5 a/b = 1.2 b = 6 a/b = 1.0 b = 7 a/b = 0.8571428571428571 b = 8 a/b = 0.75 b = 9 a/b = 0.6666666666666666 b = 10 a/b = 0.6
#если в списке два делителя (ведь простое то которое делиться на 1 и на себя) if len(n) == 2: #то очищаем список (для цикла) n.clear() #и выводим простое число а print(a)
vadaВы думаете у вас одна ошибка? А написал алгоритм максимально близко к вашим идеям. На самом деле для получения списка простых чисел обычно используется вообще другой алгоритм. Называется решето Эрастофена. Он намного эффективнее вашего.
вашего сообщения я так и не понял свою ошибку. У вас алгоритм другой)
#число которое мы проверяем -- это неплохо функцией сделать a = 5 #число которым мы пытаемся разделить а -- Оно отлично в for само заведется b = 0 #список n в который мы записываем делители (b) -- Его незачем сохранять. выкинул. n = [ ] #я просто заранее ограничил а что бы потом зациклить if a <= 1000: #мы делим наше а в диапозоне от 0 до 1000 -- незачем так перебирать достаточно до a-1 while b <= 1000: #постоянно обновляем b что бы искать новые и новые делители -- Это все делает range выкинул b = b + 1 #если а делиться на b то продолжаем если нет то начинаем опять цикл -- незачем искать все делители достаточно одного Изменил условия и цикл. if (a % b): continue; #если делиться добавим делитель в список n n.append(b) #если в списке два делителя (ведь простое то которое делиться на 1 и на себя) if len(n) == 2: #то очищаем список (для цикла) n.clear() #и выводим простое число а print(a)