С Новым годом! Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/29: Рейтинг темы: голосов - 29, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 31.05.2013
Сообщений: 4

Для заданного натурального A найти минимальное натуральное N такое, что N в степени N делится на A

31.05.2013, 23:59. Показов 5450. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Прошу помогите с заданием! Для заданного натурального A найти минимальное натуральное N такое, что N в степени N делится на A (1<=A<=10 в 9 степени). Нашёл программу для решения в лоб, но она вызывает переполнение типа уже когда A>23. Есть даже алгоритм правильного решения, но застрял на реализации.
Алгоритм
Для решения этой задачи нам потребуются некоторые математические знания. Любое число можно представить в виде двух наборов чисел: один из них - его простые делители, другой в каждом элементе содержит степень этого делителя. Т.е. числу 12 будет соответствовать набор ((2, 3), (2, 1)) - 12 = 2^2 * 3^1.
Чтобы число (X) делилось на другое число (Y) необходимо, чтобы для каждого простого делителя степень этого делителя у числа X была больше либо равна степени того же простого делителя у числа Y.
Для начала разобьем число A на простые делители. Заведем два массива, в первом будем хранить значения простых делителей, а во втором - их степени (назовем этот массив k). Будем считать, что число 1 встречается 1 раз - занесем это до начала цикла, это поможет избежать отдельной обработки числа 1. Устроим цикл (i) от 2 до A и будем считать, какие и сколько делителей встречается.
При правильном выполнении этих операций мы получим два массива, по которым можно однозначно восстановить число.
Теперь посчитаем число K из которого затем будем получать число N. Т.к. в составлении числа N должны присутствовать все простые делители, которые имеет число A, то K будет равно произведению всех простых делителей числа A со степенью 1. Т.е. числу K будет соответствовать тот же массив простых делителей, что и числу A, а все их степени будут равны 1.
Устроим цикл (j) от 1 до A, в котором будем перебирать "дополнительный множитель" для числа K. Т.е. мы получаем рабочее N = K * j. Разобьем j на том же наборе простых делителей на степени (назовем этот массив nk) и проверим следующее условие: если для всех делителей (nk[i] + 1) * K * j >= k[i], то выводим число K * j - это и будет ответ, иначе переходим к следующему шагу цикла по j.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.05.2013, 23:59
Ответы с готовыми решениями:

Для заданного натурального A найти минимальное натуральное N такое, что N в степени N делится на A...
Степень Ограничение времени 1 секунда Ограничение памяти 64Mb Ввод стандартный ввод или input.txt Вывод стандартный вывод или...

Для заданного A найти минимальное N такое, что N в степени N делится на A (найти ошибку)
Привет всем, в чем тут ошибка? Var i, A: longint; x,u, j,N, m ,d: longint; Function FDiv (A, left : LongInt) : LongInt; var ...

Для заданного натурального A найти минимальное натуральное N такое, что N в степени N делится на A
Задача: Для того чтобы проверить, как её ученики умеют считать, Мария Ивановна каждый год задаёт им на дом одну и ту же задачу – для...

5
 Аватар для NurlashKO
168 / 90 / 80
Регистрация: 07.10.2012
Сообщений: 145
01.06.2013, 19:10
Pascal
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
31
32
33
34
35
36
37
38
39
40
var
    ans, a, p :int64;
    i :longint;
    d, h :array[1 .. 200000] of int64;
begin
 
    readln(a);
 
    p := 2;
    ans := 1;
 
    while (p * p <= a) do begin
        
        if (a mod p = 0) then begin
            ans := ans * p;
            inc(h[p]);
        end;
 
        while (a mod p = 0) do begin
            inc(d[p]);
            a := a div p;
        end;
 
        inc(p);
    end;
 
    ans *= a;
 
    for i := 2 to 100000 do begin
    
        while (h[i] * ans < d[i]) do begin
            ans := ans * i;
            inc(h[i]);
        end;
        
    end;
 
    writeln(ans);
    
end.
1
0 / 0 / 0
Регистрация: 31.05.2013
Сообщений: 4
01.06.2013, 20:36  [ТС]
Не корректно работает для некоторых чисел, например если a=12, то он выдает n=3, но 33 не поделится нацело на 12. А для A=8 вообще выводит N=2.
0
 Аватар для NurlashKO
168 / 90 / 80
Регистрация: 07.10.2012
Сообщений: 145
01.06.2013, 20:44
Ты уверен что правильно переписал? http://ideone.com/7w6xO0
1
0 / 0 / 0
Регистрация: 31.05.2013
Сообщений: 4
01.06.2013, 20:49  [ТС]
Цитата Сообщение от NurlashKO Посмотреть сообщение
Ты уверен что правильно переписал? http://ideone.com/7w6xO0
Сейчас всё заработало, странное дело, спасибо!
0
0 / 0 / 0
Регистрация: 31.05.2013
Сообщений: 4
03.06.2013, 18:55  [ТС]
Для чего это цикл нужен? (и дальше после него)
Цитата Сообщение от NurlashKO Посмотреть сообщение
for i := 2 to 100000 do begin
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.06.2013, 18:55
Помогаю со студенческими работами здесь

Для заданного натурального А найти минимальное натуральное N такое, что N в степени N делится на A
Здравствуйте.Помогите понять математическую основу этой задачи, которую я хочу написать на PY. Подскажите с формулой, затем я попробую...

Найти минимальное натуральное N такое, что N в степени N делится на A
Для того чтобы проверить, как её ученики умеют считать, Мария Ивановна каждый год задаёт им на дом одну и ту же задачу – для заданного...

Найти такое максимальное число М, что N! делится на Р в степени М, но не делится на Р в степени М+1
на входе программе даются два числа N и P. программа на выходе должна дать такое максимальное число М, что N! делится на Р в степени М, но...

Найдите такое минимальное натуральное n, что Bn делится на A
Помогите, пожалуйста! Даны два натуральных числа A и B (2 A, B 2 * 109). Найдите такое минимальное натуральное n, что Bn делится на A. ...

Найти натуральное число M такое, что M делится на N и сумма цифр M делится на N
256 мегабайт, 2 секунды Задано натуральное число N (1 ≤ N ≤ 100 000). Найдите натуральное число M такое, что M делится на N и сумма...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
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/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru