|
1 / 1 / 0
Регистрация: 22.10.2016
Сообщений: 12
|
|
Найти такое число A, что бы B делилось на C без остатка07.12.2016, 12:36. Показов 1808. Ответов 1
Метки нет (Все метки)
Необходимо найти такое число A, что бы B делилось на C без остатка.
Условие: B = 1*2*3*...*(A-1)*A Входной файл содержит число C, файл на выходе должен дать ответ. Очень нужен исходник или часть исходника, где показывается, как именно проходит вычисление числа B. Желательно с комментариями. Заранее спасибо.
0
|
|
| 07.12.2016, 12:36 | |
|
Ответы с готовыми решениями:
1
Выставить цифры в числе 1234567890 таким образом, чтобы новое число делилось без остатка на все числа от 2 до 18 включительно. |
|
Модератор
10448 / 5739 / 3407
Регистрация: 17.08.2012
Сообщений: 17,458
|
||||||||||||||||
| 14.12.2016, 14:39 | ||||||||||||||||
Сообщение было отмечено marinad777 как решение
Решение
Ответов про то, как вычислить факториал, на форуме хоть пруд пруди. Посмотрите похожие темы внизу этой страницы. Вот так оно "происходит":
Ну и, задание как-то повнимательнее читать нужно... Где в задании сказано, что требуется найти какой-то там факториал? Правильный ответ: нигде. На самом деле, Вам нужно найти число A, факториал которого делится нацело на C. Ещё подозреваю, что не любое А, таких бесконечно много, а минимально возможное. И ещё есть неясности при C=1. Ну и, чё ж делать? Вырисовывается такое решение: раскладывать число на простые множители с учётом степеней этих множителей, то есть, представить C в виде где pi - простые числа (2, 3, 5, 7, 11, 13, 17, 19 ну и так далее), ki - степени этих чисел, иными словами, ki - это сколько раз можно поделить C на pi нацело. Конкретные значения pi и ki выясняются при разложении. А далее искать такое A, при котором все эти множители с учётом их степеней делят A!. Для этой цели есть неплохое подспорье: известно, что какое-либо простое число p делит A! вот такое количество раз: Скобки означают округление до меньшего целого, в случае положительных чисел можно применять паскалевскую функцию trunc или оператор div. Получается, что нужно найти минимальное А, при котором t≥k для каждого p, причём, так как используются простые числа, коллизий при таком сокращении A! на C не возникнет, потому что фактически будет иметь место частичное разложение факториала на простые множители, степени при которых не менее, чем степени при аналогичных множителях в разложении C. Очевидно, что множители эти сокращаются. Всем хороша формула, только вот узнать заранее количество слагаемых (n) не представляется возможным, и вычислить "A" при известном "k" в одно действие не получится. В принципе, не страшно, просто будем делить сомножители факториала, делящиеся на текущее pn до тех пор, пока возможно. А далее, если k всё ещё не достигнуто, будем увеличивать A и делить его на p до тех пор, пока не поделим эти сомножители на p k раз (нацело, естественно). Естественно, не нужно делить каждый сомножитель факториала, достаточно делить те, которые кратны текущему p, а таковые различаются на это самое p. Последний сомножитель и будет тем самым A для текущего p. Затем можно взять следующее p и k, проверить, подходит ли полученное A для этих p и k, и, если не подходит, опять продолжить увеличивать и делить сомножители факториала. Повторяем всё это, пока не станет C=1. Насчёт разложения C. Простые множители C придётся искать от 2 до C div 2. Если бы нужно было определить простоту C, простые множители числа C имело бы смысл искать от 2 до Множители буду искать, начиная с меньших (то есть, с двойки) путём деления C на предполагаемые множители. Преимущество: очередное предполагаемое p в случае, если оно делит C, автоматически будет простым, поскольку на все предыдущие простые уже поделено. Можно сказать, эдакая комбинация нахождения множителей перебором и решета Эратосфена. Судя по стилю вопроса, скорее всего, задание Ваше с "олимпийского" сайта. Пишем программу для робота.
Если для сайта нужен будет именно файловый ввод-вывод, раскомментируйте строки с переназначением стандартного ввода-вывода на файлы. Если требуется C > 2147483647, то, во-первых, если возможно, Вам нужно будет сменить Ваш диалект паскаля на что-нибудь более серьёзное, чем Pascal ABC, например, на Free Pascal, переменные определить как int64, тогда C может быть до 9223372036854775807. Ещё придётся заменить цикл for на, например, while. Аналогичным образом можно увеличить C до 18446744073709551615, объявив все переменные, кроме k, как uint64, а k - как int64. Увеличить C до запредельных высот можно, применив Pascal ABC.NET, если возможно, и для переменных применив тип biginteger, но в этом случае требуется существенная переработка программы. Ну, или применив длинную арифметику, но тогда робот подавится. Вообще говоря, то, что я написал - для робота в самый раз.
1
|
||||||||||||||||
| 14.12.2016, 14:39 | |
|
Помогаю со студенческими работами здесь
2
Найти наименьшее число, число M(N<M<2N) которое делятся на сумму цифр числа N(без остатка).
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
|
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
На примере нетипового документа разработанного в конфигурации КА2.
В качестве источника данных указан регистр накопления, в который записываются данные о. . .
|
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер
Написал заготовку:
dotnet new console --aot -o UrlHandler
var items = args. Split(":");
var tag = items;
var id = items;
var executable = args;. . .
|
|
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
|
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений.
9TO2GP2bpX4
a42b81fb172ffc12ca589c7898261ccb/
https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/
Слева синяя линия -. . .
|
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-text-sdl3-c. zip
finish-text-sdl3-cpp. zip
|