x=int(input())
if x==1:
****print("Число не является ни простым, ни составным")
divisor=2
while x!=divisor!=0 and x!=divisor:
****if x%divisor==0:
********print("Число составное")
********break
****divisor+=1
else:
****print("Число простое")
Python
Помогите понять г*вно ли код? Необходимо написать программу, которая определяет число просто или составное.
Дико неэффективный код. 1) Проверять надо не дальше, чем до квадратного корня из числа - код зачем-то проверяет до самого числа; 2) Не надо повторно делить на числа, кратные простым - данный код метелит всё подряд.
Есть куча нормальных алгоритмов, достаточно реализовать любой из них. Хоть даже решето Эратосфена - будет всяко лучше, чем вот это вот.
Есть куча нормальных алгоритмов, достаточно реализовать любой из них. Хоть даже решето Эратосфена - будет всяко лучше, чем вот это вот.
Это плохой код хотя бы потому, что делители проверять нужно вплоть до квадратного корня из заданного числа, а не до самого числа. Понятно, что 100 не будет делиться нажело уже на 51, верно? Значит, половина (на самом деле - больше) твоих проверок уже лишняя. Втотой момент заключается в том, что если надо будет проверить несколько чисел, проверка будет осуществляться каждый раз от начала и до конца - решето Эратосфена в этом случае было бы гораздо эффективнее, чем перебор каждый раз.
У меня такой вариант. Работает, но говорят что не самый оптимальный с точки зрения математики. Без решета Эратосфена. Зато сам придумал...
def prime_or_composite(n):
if n == 1: return False
test = True
k = n - 1
while k > 1:
if not n % k:
test = False
break
k -= 1
return 'prime' if test else'composite'
print(prime_or_composite(11))
print(prime_or_composite(12))
print(prime_or_composite(53))
print(prime_or_composite(60))
print(prime_or_composite(61))
print(prime_or_composite(62))
Мустафа Сурапбаев
с точки зрения логики тоже так себе вариант. лучше булев тип возвращать и назвать как-нибудь "is_prime_number"
Илья Данилов
так это тот же перебор в лоб всех чисел, только с циклом вайл?
Для новичка пойдет. Чисто в лоб без единой оптимизации.
Четные числа сразу - не простые, без всяких циклов (кроме двойки)
В цикле проверять только нечетные. И шаг не 1, а 2, только по нечетным делителям. Нечетные числа делятся только на нечетные.
Правильно выше написали, предел проверки квадратный корень из числа, а не само число.
Четные числа сразу - не простые, без всяких циклов (кроме двойки)
В цикле проверять только нечетные. И шаг не 1, а 2, только по нечетным делителям. Нечетные числа делятся только на нечетные.
Правильно выше написали, предел проверки квадратный корень из числа, а не само число.
Тимур Тасбергенов
получается, код будет длиннее, но работать быстрее, если проверку проводить до корня из числа, отбрасывая все чётные?
Просто мой вариант, не эталон..
num = int(input())
is_prime = True
if num % 2:
div = 3
while div**2
Похожие вопросы
- Необходимо написать программу которая посчитает сумму всех элементов в матрице.
- 1) Напишите программу, которая будет принимать числа от пользователя и суммировать их, пока он не напишет слово «sum».
- Помогите написать программу которая посчитает количество строк в отзыве
- Напишите программу, которая подсчитает и выведет количество слов длины 10, которые можно составить из букв a, b, c.
- Написать программу, которая находит произведение элементов списка, находящихся на нечетных позициях.
- Помогите написать программу на Python, моя версия кода на скрине, вроде всё работает, но автопроверка не проходит.
- Простые числа.Напишите программу
- Выразите число в виде суммы четырех квадратов Нужно написать программу на python
- Питон. Ошибка в программе. Вычисление простых чисел
- Python программирование. Помогите написать программу.
Нужно определить простое ли единственное число, а не найти все простые в диапазоне..