|
13 / 2 / 0
Регистрация: 27.11.2013
Сообщений: 9
|
||||||
проверка на мультипростое число28.11.2013, 11:51. Показов 3264. Ответов 32
Метки нет (Все метки)
Доброго времени суток!
Попыталась найти что-то подобное на форуме - не нашла (очень сложно сформулировать поисковый запрос по проблеме). Сама уже вторые сутки ломаю голову (понимаю, что не срок. Однако препод бьет копытом, брызжет слюной и ругается). Задача Требуется написать программу, которое будет выводить, является ли введенное с клавиатуры число "мультипростым". Под "мультипростым" числом понимается простое число, которое либо состоит из одной цифры (3, 5...), либо которое можно разбить на простые и/или мультипростые составляющие. Под разбивкой понимается отделение скольких бы то ни было левых цифр числа от остальных. Сложно объяснить, проще показать на примере: Число 7523. Само по себе число 7523 простое. Возможны три варианта разбивки: 7 523 75 23 752 3 7 - простое число. 523 - тоже просто и может быть разбито на 5 23 или 52 3. Пять - простое число. Двадцать три - тоже, причем, два и три - тоже простые. Т.е. возможен как минимум один вариант, что это число "мультипростое" => тру. Программа должна обязательно содержать две функции: нерекурсивную int is_prime(int num) (которая возвращает 1, если число простое, и 0 - в обратном случае) и рекурсивную int is_multi_prime(int num) (которая возвращает 1, если число "мультипростое", и 0 - в обратном случае). Если кому нужно, я могу выслать оригинал задания (на английском языке). Ко всему прочему, есть ограничения, установленные преподавателем: "вы должны использовать только то, что мы уже прошли на занятиях. и ни в коем случае то, что мы еще не прошли". Так что массивы, строки, классы - использовать нельзя. По сути, можно использовать только функции и рекурсию. Мои соображения по поводу решения. (это можно не читать, если само задание понятно и решение его очевидно) я, честно говоря, уже запуталась в своих размышлениях. И получившийся говнокод кидать не буду (ибо стыдно). В любом случае, is_prime - это просто.
Она используется в дальнейшем для разделения числа. Если мы хотим отделить первое число, то num1 = num\10^(n-1) - первая цифра ("7" в примере) num2 = num%10^(n-1) - все остальное("523" в примере) на входе функция is_multi_prime в первую очередь проверяет целое ли введенное число вообще (если нет, значит сразу же 0), потом разделяет его по первой цифре. Если первая цифра - прайм, то функция рекурсивно вызывается опять с параметром num2. В принципе, у меня получилось добиться того, что 7523 - мультипрайм. И даже пара самых простых непраймов и не мультипраймов давали правильные значения. Но как только числа стали четырехзначными, все посыпалось. Более того, я ни малейшего понятия не имею, как запихнуть проверку следующего разделения, если первое не прошло (например, 2311 - простое число. два - не простое, но 23 и 11 - простые, 2 и 3, 1 и 1 - простые). Ну в смысле, я могу русским/английским языком описать алгоритм, но не могу его описать на Си. З.ы, Думаю, меня вполне устроит подробный алгоритм на русском/английском, но если будет разобранный код - будет лучше. Также, могу скинуть скетч блок-схемы, конкретно лекции/семинары по курсу и т.п. Спасибо!!
0
|
||||||
| 28.11.2013, 11:51 | |
|
Ответы с готовыми решениями:
32
Проверка введенных данных: число/не число |
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
|
|||||||||||||
| 02.12.2013, 19:59 | |||||||||||||
![]() вижу два прототипа функции
бывает
0
|
|||||||||||||
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
|
| 02.12.2013, 20:02 | |
|
ошибся таки
Добавлено через 47 секунд 1 2 3 5 7 - Мультипростые. Если простое число X можно представить в виде K*10n + M, где M < 10n, K, M - мультипростые, то X - мультипростое
0
|
|
|
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
|
||||||||||||
| 02.12.2013, 20:10 | ||||||||||||
|
Исправленный код:
Добавлено через 7 минут
1
|
||||||||||||
|
13 / 2 / 0
Регистрация: 27.11.2013
Сообщений: 9
|
|
| 03.12.2013, 00:41 [ТС] | |
|
После проверки преподавателем, было снято два бала, за то что программа не правильно обрабатывает нули.
например, число 22307. Остальные замечания приняла к сведению. Qwertiy, к сожалению, прямо сейчас не могу просмотреть внимательно коды - надо на другие задачи переключаться. Но позже - обязательно. Спасибо
0
|
|
|
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
|
||
| 03.12.2013, 01:22 | ||
|
0
|
||
|
13 / 2 / 0
Регистрация: 27.11.2013
Сообщений: 9
|
|
| 03.12.2013, 15:17 [ТС] | |
|
Qwertiy, говорят, что вылетает, если один ноль в числе
__ и действительно, 22307 выдает не мультипрайм
0
|
|
|
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
|
|||
| 03.12.2013, 17:18 | |||
|
Вот я беру свой код отсюда и всё работает на числах от 0 до 10000: http://codepad.org/cVMZS41g. Добавлено через 5 минут
0
|
|||
|
Модератор
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,980
|
|||
| 03.12.2013, 18:20 | |||
|
0
|
|||
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
||
| 03.12.2013, 18:40 | ||
|
223 = 2 * 23 23 = 2 * 3 Здесь * - операция "расщепления" чтобы число было мультипраймом достаточно существования одной серии расщеплений
0
|
||
|
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
|
||||||||
| 03.12.2013, 18:43 | ||||||||
0
|
||||||||
|
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
|
||
| 03.12.2013, 19:04 | ||
|
22 307 - не подходит, т. к. 22 делится на 2. 2 2307 - не подходит, т. к. 2307 делится на 3. А из остального такие три куска не получатся.
0
|
||
|
|
||
| 03.12.2013, 19:15 | ||
|
ну, я изначально предполагал любое число составляющих, а не 2, опираясь на условие
0
|
||
| 03.12.2013, 19:15 | |
|
проверка число или не число
Проверка на число Проверка на число проверка на число Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Жара жесть.
kumehtar 18.08.2026
Пролетают летом дни
Тридцать пять жары в тени.
Каждый август год от года
Дарит жаркую погоду.
|
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
|
Лето уходит
kumehtar 17.08.2026
|
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
|
|
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины".
За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html
Задача: . . .
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|