0 / 0 / 0
Регистрация: 30.05.2021
Сообщений: 12

Проверка числа на простоту, питон

19.06.2021, 10:09. Показов 9639. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Проверка числа на простоту
Дано натуральное число x>1. Проверьте, является ли оно простым. Программа должна вывести слово YES, если число простое, и NO, если число составное.
Здравствуйте, возникла проблема в решении задачи, сразу скажу, да, она очень простая, но мне хочется разобраться в своем решении, а не копипастить чужие, заранее спасибо(если число простое, то выводим yes, иначе no)
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import math
c=0
x=int(input())
y=math.sqrt(x)
z=int(y//1)
if (x%2==0 or x%y==0) and x>2:
    print("NO")
    c=1
else: 
    for i in range(3, z, 2):
        if y%i==0:
            print("NO")
            c=1
            break
if c==0:
    print("YES")
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.06.2021, 10:09
Ответы с готовыми решениями:

Проверка числа на простоту
Помогите решить пожалуйста, пробовал через факториал, но слишком долго получилось Дано натуральное число n>1. Проверьте, является ли...

Проверка числа на простоту
Дано натуральное число x>1. Проверьте, является ли оно простым. Программа должна вывести слово YES, если число простое и NO, если число...

Проверка числа на простоту
Проверка числа на простоту Дано натуральное число x>1. Проверьте, является ли оно простым. Программа должна вывести слово YES, если число...

21
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
19.06.2021, 10:20
Лучший ответ Сообщение было отмечено kukurza как решение

Решение

Не по теме:

Цитата Сообщение от kukurza Посмотреть сообщение
мне хочется разобраться в своем решении
Было бы твое - разобрался.


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
def isPrime(x):
    if x % 2 == 0:
        return x == 2
    i = 3
    while i * i <= x:
        if x % i == 0:
            return False
        i += 2
    return True
    
assert isPrime(2)
assert isPrime(3)
assert not isPrime(4)
assert isPrime(5)
1
0 / 0 / 0
Регистрация: 30.05.2021
Сообщений: 12
19.06.2021, 11:25  [ТС]
Цитата Сообщение от Arsegg Посмотреть сообщение
Было бы твое - разобрался.
обидно конечно, но писал его полностью сам, а в итоге доработав свое с вашей помощью получил это:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
c=0
x=int(input())
y=x**0.5
z=int(y//1)
if x>2:
    if x%2==0 or x%y==0:
        print("NO")
        c=1
    else: 
        i=3
        while i*i<=x:
            if x%i==0:
                print("NO")
                c=1
                break
            i+=2
if c==0:
    print("YES")
0
18 / 16 / 0
Регистрация: 03.01.2018
Сообщений: 208
Записей в блоге: 1
22.06.2021, 12:14
kukurza, из книжки Лутца. Если разбирать код, то он немного неоптимален и имеет пару допущений, но для общего развития отправляю сюда

Python
1
2
3
4
5
6
7
8
9
y = int(input())
x = y//2
while x > 1:
    if y % x == 0:
        print(y, 'has factor', x)
        break
    x -= 1
else:
    print(y, 'is prime')
0
 Аватар для Elliot_Alderson
93 / 11 / 7
Регистрация: 14.06.2020
Сообщений: 52
23.06.2021, 21:40
letsmail9,
Он очень неоптимален. Если число n не имеет делителей в промежутке [2; sqrt(n)], то n простое. Вы проверяете [2; n*0,5]
0
34 / 28 / 6
Регистрация: 23.06.2021
Сообщений: 145
24.06.2021, 02:02
Код есть на викиучебнике.
Python
1
2
3
4
5
6
7
n = int(input())    # число, до которого хотим найти простые числа 
numbers = list(range(2, n + 1))
for number in numbers:
    if number != 0:
        for candidate in range(2 * number, n+1, number):
            numbers[candidate-2] = 0    
print(*list(filter(lambda x: x != 0, numbers)))    # выводим простые числа
0
34 / 28 / 6
Регистрация: 23.06.2021
Сообщений: 145
01.07.2022, 15:44
Вот короче:
Python
1
2
3
4
5
def prime(number):
    return number > 1 and all(number % divisor for divisor in range(2, int(number ** .5) + 1))
 
 
print(prime(int(input())))
Добавлено через 1 минуту
Elliot_Alderson, Вы правы, но Ваше направление мышления тоже до конца неоптимизированно
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
01.07.2022, 16:13
Цитата Сообщение от ResDT Посмотреть сообщение
Вот короче:
Python
1
print('No' if re.fullmatch(r'(11+?)\1+', '1' * n) else 'Yes')
1
34 / 28 / 6
Регистрация: 23.06.2021
Сообщений: 145
01.07.2022, 16:22
iSmokeJC, ты и сюда регулярки засунул?)
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
01.07.2022, 16:23
А чего бы и нет?
0
34 / 28 / 6
Регистрация: 23.06.2021
Сообщений: 145
01.07.2022, 23:08
iSmokeJC, а ты проверь на промежутке от 10**6 до 2 * 10**6
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
02.07.2022, 14:56
ResDT, а при чем здесь промежуток? Речь про единственное число, не?
0
34 / 28 / 6
Регистрация: 23.06.2021
Сообщений: 145
10.07.2022, 22:20
iSmokeJC, окей, вот такое число: 30000000
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
10.07.2022, 22:38
ResDT, и что?
0
34 / 28 / 6
Регистрация: 23.06.2021
Сообщений: 145
10.07.2022, 22:41
iSmokeJC, и все, в том-то и дело. Долго...
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
10.07.2022, 22:44
0
34 / 28 / 6
Регистрация: 23.06.2021
Сообщений: 145
10.07.2022, 22:45
iSmokeJC, исчерпывающе
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
10.07.2022, 23:10
Цитата Сообщение от ResDT Посмотреть сообщение
исчерпывающе
А что ты хотел услышать? Что вариант с регуляркой медленнее? ОК.
Твой вариант намного круче варианта с регуляркой, т.к. регулярки медленнее.
0
34 / 28 / 6
Регистрация: 23.06.2021
Сообщений: 145
10.07.2022, 23:20
iSmokeJC, уж точно не это) Мне задумка нравится, но она медленнее, объяснишь, в чем ее суть? Типа, как полученный шаблон может относиться к простым числам?
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
11.07.2022, 00:03
ResDT, ой, там многабукофф.
Нужно создать строку из единиц, где количество единиц соответствует самому числу и уже к этой строке применить регулярное выражение. Если совпадения нет — число простое.
Подвыражение (11+?) совпадает со строками вроде 11, 111, и т.д… Часть "\1+" будет искать далее по строке совпадения с результатами поиска первого подвыражения. В первый раз совпадение произойдет по строке «11» и потом поиск строки «11» будет произведен снова, а затем снова до конца строки. Если поиск завершится успешно, число не является простым. Почему? Потому, что будет доказано, что длина строки делится на 2 и, соответственно, само число тоже делится на два. Если совпадения не произойдет, движок регулярных выражений начнет искать строку «111» и ее повторения (таким образом реализуя дальше решето Эратосфена). Если первое подвыражение становится достаточно длинным (n/2) и совпадений по-прежнему не будет обнаружено, число будет являться простым.
Вотъ оригинал
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.07.2022, 00:03
Помогаю со студенческими работами здесь

Проверка числа на простоту
Логической переменной p присвоить значение true, если целое n (n&gt;1) – простое число, и значение false иначе. желательно сразу с...

Проверка числа на простоту
Дано натуральное число n&gt;1. Проверьте, является ли оно простым. Программа должна вывести слово YES, если число простое и NO, если число...

Проверка числа на простоту
Всем вновь привет! Не можете ли вы объяснить мне что делается в программе с 29 по 52 строки. А то нужную программу нашел но не все понимаю...

Проверка числа на простоту
Не могу понять куда воткнуть данный код для проверки на простоту bool Prim(int n) { if (n &lt;2) return false; for(int...

Проверка числа на простоту
Надо проверить число на простоту с помощью функции. Вот примерное решение, надо где-то что-то поменять или дописать. Помогите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

Новые блоги и статьи
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru