Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/435: Рейтинг темы: голосов - 435, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 07.01.2018
Сообщений: 17

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

08.07.2018, 22:52. Показов 93573. Ответов 23

Студворк — интернет-сервис помощи студентам
Помогите решить пожалуйста, пробовал через факториал, но слишком долго получилось
Дано натуральное число n>1. Проверьте, является ли оно простым. Программа должна вывести слово YES, если число простое и NO, если число составное. Решение оформите в виде функции IsPrime(n), которая возвращает True для простых чисел и False для составных чисел. Программа должна иметь сложность O(корень из n): количество действий в программе должно быть пропорционально квадратному корню из n (иначе говоря, при увеличении входного числа в k раз, время выполнения программы должно увеличиваться примерно в корень из k раз).
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.07.2018, 22:52
Ответы с готовыми решениями:

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

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

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

23
3 / 3 / 0
Регистрация: 11.10.2014
Сообщений: 13
09.07.2018, 00:02
Может быть так?... За скорость не могу ручаться, но 27644437 он оперативно переварил.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
def Isprime(n):
    i = 2
    j = 0
    while(True):
        if(i*i <= n and j != 1):
            if(n % i == 0):
                j=j+1
            i=i+1
        elif(j==1):
            print('No')
            return False
        else:
            print('Yes')
            return True
3
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
09.07.2018, 00:13
Лучший ответ Сообщение было отмечено artemchaiok2332 как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def is_prime1(n):
    for i in range(2, int(math.sqrt(n) + 1)):
        if n % i == 0: 
            return False
    return n > 1
   
def is_prime2(n, d=3):
    if n < 2 or n != 2 and n & 1 == 0:
        return False
    if d * d > n:
        return True
    return n % d and is_prime2(n, d + 2)
 
def is_prime3(n):
    return ~-2 ** n % n < 2
 
def is_prime4(n):
    return sympy.isprime(n)
2
0 / 0 / 0
Регистрация: 07.01.2018
Сообщений: 17
09.07.2018, 14:49  [ТС]
Anarom, если вбить в тестировщик 2 выдаёт неверный ответ, и решение нужно при помощи рекурсии сделать, но спасибо

Добавлено через 2 минуты
Garry Galler, для меня такое решение пока слишком сложное, некоторые вещи мы ещё не проходили, да и в тестировщике выдаёт Runtime error
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
09.07.2018, 15:02
Все решения проходят тест на первые 500 простых чисел из википедии:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
nums = [ 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,
73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,
179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,
283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,
419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,
547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,
661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,
811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,
947,953,967,971,977,983,991,997,1009,1013,1019,1021,1031,1033,1039,1049,1051,1061,1063,1069,
1087,1091,1093,1097,1103,1109,1117,1123,1129,1151,1153,1163,1171,1181,1187,1193,1201,1213,1217,1223,
1229,1231,1237,1249,1259,1277,1279,1283,1289,1291,1297,1301,1303,1307,1319,1321,1327,1361,1367,1373,
1381,1399,1409,1423,1427,1429,1433,1439,1447,1451,1453,1459,1471,1481,1483,1487,1489,1493,1499,1511,
1523,1531,1543,1549,1553,1559,1567,1571,1579,1583,1597,1601,1607,1609,1613,1619,1621,1627,1637,1657,
1663,1667,1669,1693,1697,1699,1709,1721,1723,1733,1741,1747,1753,1759,1777,1783,1787,1789,1801,1811,
1823,1831,1847,1861,1867,1871,1873,1877,1879,1889,1901,1907,1913,1931,1933,1949,1951,1973,1979,1987,
1993,1997,1999,2003,2011,2017,2027,2029,2039,2053,2063,2069,2081,2083,2087,2089,2099,2111,2113,2129,
2131,2137,2141,2143,2153,2161,2179,2203,2207,2213,2221,2237,2239,2243,2251,2267,2269,2273,2281,2287,
2293,2297,2309,2311,2333,2339,2341,2347,2351,2357,2371,2377,2381,2383,2389,2393,2399,2411,2417,2423,
2437,2441,2447,2459,2467,2473,2477,2503,2521,2531,2539,2543,2549,2551,2557,2579,2591,2593,2609,2617,
2621,2633,2647,2657,2659,2663,2671,2677,2683,2687,2689,2693,2699,2707,2711,2713,2719,2729,2731,2741,
2749,2753,2767,2777,2789,2791,2797,2801,2803,2819,2833,2837,2843,2851,2857,2861,2879,2887,2897,2903,
2909,2917,2927,2939,2953,2957,2963,2969,2971,2999,3001,3011,3019,3023,3037,3041,3049,3061,3067,3079,
3083,3089,3109,3119,3121,3137,3163,3167,3169,3181,3187,3191,3203,3209,3217,3221,3229,3251,3253,3257,
3259,3271,3299,3301,3307,3313,3319,3323,3329,3331,3343,3347,3359,3361,3371,3373,3389,3391,3407,3413,
3433,3449,3457,3461,3463,3467,3469,3491,3499,3511,3517,3527,3529,3533,3539,3541,3547,3557,3559,3571 ]
 
 
print(all([is_prime1(n) for n in nums]))  # True
print(all([is_prime2(n) for n in nums]))  # True
print(all([is_prime3(n) for n in nums]))  # True
Собственно, не я их придумал - это кальки с типичных решений на C\Pascal и т.д.
1
0 / 0 / 0
Регистрация: 07.01.2018
Сообщений: 17
09.07.2018, 15:10  [ТС]
Garry Galler, можете весь код задачи скинуть, т.е то что после функции, мб я что - то не так сделал
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
09.07.2018, 15:37
Во все функции передается один аргумент - тестируемое число.
Что касается ошибки - я правильно понимаю, что ошибку тестировщик выдает на рекурсивном варианте?
И это правильно - в python рекурсия не бесконечная: глубина всего 1000. И если число вызовов превысило эту глубину - получаем ошибку.
Поэтому вместо рекурсивных решений в python лучше использовать итеративные.

Вот, к примеру, решение №1 прекрасно справляется с числами в 100 млрд.
Python
1
2
3
import sympy
for n in sympy.primerange(100000000000,100000001000):
    print(is_prime1(n))
Впрочем, глубину рекурсии можно увеличить:
Python
1
sys.setrecursionlimit(100000000)
Добавлено через 16 минут
Цитата Сообщение от artemchaiok2332 Посмотреть сообщение
Программа должна вывести слово YES, если число простое и NO, если число составное.
Принты внутрь функции не нужно засовывать:
Python
1
print("YES" if is_prime(n) else "NO")
Добавлено через 1 минуту
А как уж там тестировщик передает аргументы в функцию вам должно быть лучше известно.
1
0 / 0 / 0
Регистрация: 07.01.2018
Сообщений: 17
09.07.2018, 15:41  [ТС]
Garry Galler, да, я уже понял, всё работает, 100/100, спасибо
0
1 / 1 / 0
Регистрация: 11.11.2018
Сообщений: 17
11.11.2018, 12:16
Пожалуйста выложи полный код этой программы, очень нужно!

Добавлено через 1 минуту
пожалуйста, вышлите полный ответ на задачу

Добавлено через 34 секунды
пожалуйста, пришли полный ответ на эту задачу
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
11.11.2018, 17:28
Цитата Сообщение от Garry Galler Посмотреть сообщение
в python рекурсия не бесконечная: глубина всего 1000.
Марк Лутц утверждает, что рекурсия ограничена только объемом памяти на компьютере.
А вот подтверждение этому самим Python'ом этого:
>>> help(sys.setrecursionlimit)
Help on built-in function setrecursionlimit in module sys:

setrecursionlimit(...)
setrecursionlimit(n)

Set the maximum depth of the Python interpreter stack to n. This
limit prevents infinite recursion from causing an overflow of the C
stack and crashing Python. The highest possible limit is platform-
dependent.

Установите максимальную глубину стека интерпретатора Python в n. Это
limit предотвращает бесконечную рекурсию от переполнения C
стек и сбой Python. Максимально возможное ограничение-платформа-
зависимый.

Функция же sys.setrecursionlimit() служит для того, что бы установить лимит и не доводить до переполнения памяти компьютера.
Не знаю, может раннии версии Python ограничивают рекурсию по умолчанию, но начиная с версии 3.0 этого точно нет. Кстати мой Python с которого сообщение, версии 3.6.3
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
11.11.2018, 18:11
Viktorrus,
И чем утверждение Лутца противоречит моей фразе? Глубина рекурсии в python как была не бесконечная, так и осталась.
0
 Аватар для SashaRasha
91 / 47 / 8
Регистрация: 08.10.2008
Сообщений: 445
11.11.2018, 20:12
Цитата Сообщение от Garry Galler Посмотреть сообщение
Python
1
import sympy
Отлаживаемая программа выдала исключение
unhandled ImportError "No module named 'sympy'"
что-то не заводится
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
11.11.2018, 20:32
Цитата Сообщение от SashaRasha Посмотреть сообщение
что-то не заводится
sympy не стандартный модуль. Его требуется установить.

Добавлено через 9 минут
Цитата Сообщение от Viktorrus Посмотреть сообщение
рекурсия ограничена только объемом памяти на компьютере.
Это если говорить об абстрактной рекурсии из математич. учебников.
Реальная рекурсия всегда ограничена размером стека программы. Размер стека - 1-2 mb (на linux м.б. немного больше) по умолчанию.
Цитата Сообщение от Viktorrus Посмотреть сообщение
не доводить до переполнения памяти компьютера.
Неверно. До переполнения стека программы.
1
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
12.11.2018, 04:26
Garry Galler, Вы оказались правы, рекурсия ограничена размером стека.
Я перепутал с объемом памяти для данных. Она ограничена только объемом оперативной памяти + подгружаемая память на жестком диске, а так же разрядностью процессора, от которой зависит максимальная величина адресации памяти.
0
1 / 1 / 0
Регистрация: 11.11.2018
Сообщений: 17
12.11.2018, 19:41
Выложите пожалуйста полный код программы
0
1 / 1 / 0
Регистрация: 11.11.2018
Сообщений: 17
13.11.2018, 13:19
artemchaiok2332, привет выложи пожалуйста полный код программы
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
13.11.2018, 19:35
Просьбу нужно не мне писать, а в ответе тому, у кого программа. Реализацию, если я не ошибаюсь предложил Garry Galler, . Если же Вы хотите обратиться к хозяину темы, то пишите просьбу в ответе для artemchaiok2332, Кнопочку ответ у них нажимайте, а не на моем комментарии.
0
1 / 1 / 0
Регистрация: 11.11.2018
Сообщений: 17
14.11.2018, 19:10
Garry Galler, Пожалуйста выложите полный кож программы
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
14.11.2018, 20:53
Цитата Сообщение от makishmaki Посмотреть сообщение
выложите полный кож программы
У меня его нет. Я показал примеры - причем полностью решающие задачу.
Цитата Сообщение от artemchaiok2332 Посмотреть сообщение
всё работает, 100/100
ТС'у этого вполне хватило. Чего именно не хватает вам - мне непонятно.
0
1 / 1 / 0
Регистрация: 04.01.2020
Сообщений: 1
04.01.2020, 21:09
Python
1
2
3
4
5
6
7
8
9
Is_Prime = int(input())#число, проверяющееся на простоту 
p = 1#1, если число простое, 0, если нет   
for i in range(2,Is_Prime): #перебираем делители
    if Is_Prime % i == 0: #если делитель найден, то число составное
        p=0#
if p == 0:
    print('Is not a prime number')
else:
    print('is a prime number')
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.01.2020, 21:09
Помогаю со студенческими работами здесь

Проверка числа на простоту
Хочу проверить число на простоту, но не вижу ошибку в коде. Можете подсказать, что не так? #include &lt;iostream&gt; #include...

Проверка числа на простоту
Подскажите пожалуйста, как проверить, что число является не простым

проверка числа на простоту
Помогите написать программу для проверки числа на простоту. Нужно использовать тест Рабина-Миллера!

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
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. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru