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

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

08.07.2018, 22:52. Показов 93376. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru