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

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

08.07.2018, 22:52. Показов 93095. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru