Арифметические алгоритмы (Теория чисел)

72 задачивместе с подтемами
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: успешные, неуспешные.

Банда Фомина состоит из n групп, в каждой из которых ai человек. Планируется провести q рейдов. В i-ом рейде будет участвовать ровно один разбойник из каждой группы, номер которой лежит в отрезке \([l_i, r_i]\).

Мелехов тоскует, поэтому для каждого рейда он решил посчитать количество возможных отрядов по модулю \(10^9 + 7\). Однако Григорий постоянно находится в раздумьях о смысле жизни и поиске правды, поэтому он не может сконцентрироваться на расчетах и просит вас помочь.

Входные данные
В первой строке дано число n (\(1 <= n <= 10^5\)) – количество групп в банде Фомина.
Во второй строке дано n натуральных чисел ai (\(1 <= a_i <= 10^6\)) – количество человек в i-ой группе.
В третьей строке дано число q – количество рейдов.
Далее дано q строк, в каждой из которых дано два числа – li и ri (\(1 <= l_i <= r_i <= n\)) – номера групп, участвующих в i-ом рейде.

Выходные данные
Выведите q чисел, каждое в отдельной строке – ответ на задачу.

 

Примеры
Входные данные Выходные данные
1 6
1 3 7 1 4 100
3
1 3
3 4
2 6
21
7
8400

Будем называть два натуральных числа \(x\) и \(y\) непохожими, если они различны и нет двух различных отличных от \(1\) чисел \(a\) и \(b\), таких, что и \(x\) и \(y\) делятся как на \(a\), так и на \(b\). Например, 6 и 9 непохожи, так как единственное число, отличное от 1, на которое делятся оба числа "— 3. А вот числа 12 и 18 не являются непохожими, так как оба делятся на 2, 3 и 6.

Задано натуральное число \(x\), а также натуральные числа \(l\) и \(r\). Требуется найти все числа \(y\), такие что \(l \le y \le r\), и числа \(x\) и \(y\) непохожи.

Формат входных данных
На первой строке ввода задано число \(x\) (\(1 \le x \le 10^9\)).

На второй строке ввода задано число \(l\), на третьей строке ввода задано число \(r\) (\(1 \le l \le r \le 10^9\); \(r - l \le 1000\)).

Формат выходных данных
На первой строке выведите число \(k\) "— количество непохожих на \(x\) чисел на отрезке от \(l\) до \(r\), включительно.

На второй строке выведите все эти числа в возрастающем порядке.

У Деда Мороза есть N мешков с подарками. Каждый мешок имеет вес a1, a2, ..., aN. Для равномерной нагрузки на сани Деду Морозу необходимо, чтобы вес всех мешков был одинаковым. Чтобы этого добиться, Дед Мороз своим волшебным посохом может выполнить одну из следующих операций любое количество раз, возможно ноль раз.

  • Дед Мороз может выбрать любой мешок и если его вес кратен двум, то уменьшить вес в два раза.
  • Дед Мороз может выбрать любой мешок и если его кратен трем, то уменьшить вес в три раза.

На каждую операцию у Деда Мороза уходит 1 секунда.

Найдите минимальное общее количество секунд, которое необходимо Деду Морозу, для достижения одинакового веса всех мешков с подарками. Если нет способа достичь цели, выведите вместо этого значение -1.



Входные данные
Программа получает на вход в первой строке целое число N (2 <= N <= 1000). Во второй строке записаны N чисел ai - вес i-го мешка с подарками (1 <= ai <= 109).


Выходные данные
Выведите ответ на задачу.
 
 
Примеры
Входные данные Выходные данные
1 3
1 4 3
3
2 3
2 7 6
-1
3 6
1 1 1 1 1 1 
0
XOR#39625
Исключающим "или" (XOR) называется булева функция, а также логическая и битовая операция от двух аргументов, результат которой истинен тогда и только тогда, когда один из аргументов истинен, а второй - ложен.
Циклический побитовый сдвиг вправо - операция, при которой младший разряд переносится в начало числа и становится старшим, а все остальные сдвигаются вправо на одну позицию.
К двум 16-битовым числам A и B, записанным в 16-ричной системе счисления, была применена операция исключающего "или", а затем к результату - операция побитового циклического сдвига вправо на K разрядов. Одно из двух исходных чисел было забыто, требуется его восстановить.
Входные данные
в строку через пробел записаны числа A, K и результат X. Числа A и X заданы в 16-ричной системе счисления, K - в десятичной.
Выходные данные
число B.
Примеры
Входные данные Выходные данные
1 1A2B 4 4E5D FFFF
2 AB00 1 5C9A 1234
Даны два простых числа p и q. Надо зашифровать сообщение длинной N с помощью алгоритма RSA.

Входные данные
В первой строке вводятся p и q (3<=p,q<10), далее вводится длина N (N<10) и сообщение состоящее из натральных чисел не превышающее 10.

Ввод Вывод
3 7
3
1 2 3
1 11 12

65822#65822
Заданы два различных целых положительных числа a и b, записанные в восьмеричной системе счисления. Оба числа двузначные. В условии данной задачи в двузначном числе старшая цифра может быть и нулем.
В двузначном числе за один ход разрешается заменить любую цифру на сумму цифр по модулю 8 (остаток от деления суммы цифр на 8). Построить цепочку ходов минимальной длины, которая переводит a в b. Если существует несколько цепочек минимальной длины, то выбрать ту из них, в которой сумма всех чисел максимальна (числа a и b являются частью цепочки). В качестве ответа записать сумму чисел в найденной цепочке. Результат записывается в десятичной системе счисления. В случае невозможности построить цепочку вывести число 0.

Формат входных данных
На вход программе подается строка, содержащая два целых положительных восьмеричных двузначных числа a и b, записанные через пробел.
Формат выходных данных
Вывести целое десятичное число – сумму чисел в найденной цепочке.
2#65793
В мире двоичных чисел решили разобраться, почему некоторые числа не дружат друг с другом, потому после ряда проведённых экспериментов было выявлено, что точно не дружат друг с другом те числа, которые нельзя поставить рядом так, чтобы в их последовательности не было двух и более единиц подряд, а также не было трёх и более нулей подряд.
Помогите понять жителям двоичного мира, сколько пар чисел от 1 до N нельзя точно никак подружить.
Например: есть два числа 4 и 5, в двоичной системе счисления они представлены как 100 и 101. Если их поставить как 101 и 100, получится 101100, что даёт две единицы подряд в строке, значит дружить они не будут, но если поставим наоборот 100 и 101 = 100101, то двух единиц подряд нет, а также нет трёх и более нулей подряд, значит числа могут подружиться.
Формат входных данных
На первой строке подаётся число N (1 <= N <= 105) – количество чисел в двоичном мире от 1 до N (включительно).
Формат выходных данных
Вывести на первой строке количество пар чисел, которые никак нельзя будет подружить друг с другом. Рассматриваются все числа от 1 до N, но все числа уникальны, потому не рассматриваются пары одинаковых чисел и повторяющиеся пары (если нельзя подружить число x с числом y, то пара (x, y) и (y, x) считается одной парой чисел).
Злым числом в математике называется неотрицательное целое число с чётным числом единиц в его двоичной записи (например, число 5 — злое, в его двоичной записи две единицы). Они используются в теории чисел при исследовании последовательности Морса–Туэ и применяются в алгоритмах фрактального сжатия изображений. Натуральное число будем называть очень злым, если само оно чётное и количество единиц в его двоичной записи также чётное. Это такие числа, как 6, 10, 12, 18, 20 и так далее. По данному n определите количество очень злых чисел, не превосходящих n.

Формат входных данных
Единственная строка входного файла содержит натуральное число n (1 ≤ n ≤ 109 ).

Формат выходных данных
Выведите одно неотрицательное целое число — количество очень злых натуральных чисел, не превосходящих n.

Летовецкие числа — это положительные целые числа, которые делятся на ab или c.

Напишите программу, которая находит n-е по счёту летовецкое число.

Формат входных чисел
Программа получает на вход четыре целых положительных числа nab, и c. Каждое число записано в отдельной строке. 
Ограничения на входные данные

  • 1 <= n, a, b, c <= 109
  • 1 <= a * b * c <= 1018
  • Гарантируется, что результат находится в диапазоне [1, 2 * 109].



Формат выходных чисел
Ваша программа должны вывести одное число -  n-е по счёту летовецкое число.
 

В далеком королевстве жил могучий маг по имени Максимус, который обладал уникальной способностью управлять волшебными кристаллами. Эти кристаллы были не простыми — на каждом из них написано целое число, колеблющееся от –100 000 до 100 000. Однажды, Максимус решил провести эксперимент и выяснить, сколько волшебных троек кристаллов он сможет найти.

Но не просто троек! В каждой тройке должно быть хотя бы одно число, которое таит в себе загадочную цифру 2. Кроме того, сумма чисел, записанных на этих трех кристаллах должна быть простым числом, потому что простые числа это любимые числа Максимуса. (Тройкой кристаллов Максимус считает три кристалла, которые лежат рядом.)

Итак, наш маг отправился в путешествие по своей коллекции кристаллов. Он проверял каждую тройку лежащих рядом кристаллов, проверяя каждую на наличие заветной цифры 2 и вычисляя их сумму. В конце концов, он хотел узнать, сколько таких волшебных троек ему удалось найти, и какая из них имела максимальную сумму.

Помогите Максимиусу в его приключении! Напишите программу, которая определит количество таких троек и вычислит максимальную сумму среди них. В ответе запишите два числа: сначала количество найденных троек, затем максимальную сумму элементов таких троек.

Формат входных данных
В первой строке вводится число N (1<=N<=10 000)  - количество кристаллов, которые имеются у Максимуса. В следующих N строках, по одному в строке, вводятся N целых чисел - числа, которые записаны на кристаллах (все числа по модулю не более 100 000).


Формат выходных данных

В ответе запишите два числа в одной строке через пробел: сначала количество найденных троек чисел, затем максимальную сумму элементов таких троек.

В известной школе прошёл урок физкультуры. Как полагается, всех построили в шеренгу и попросили рассчитаться на <<первый–\(k\)-й>>, где \(k > 1\).

Как известно, расчёт на <<первый–\(k\)-й>> происходит следующим образом: первые \(k\) человек имеют номера \(1, 2, 3, \ldots, k\), следующие \(k - 1\) человек имеют номера \(k - 1, k - 2, \ldots, 1\), следующие \(k - 1\) человек имеют номера \(2, 3, \ldots, k\) и т.д. Таким образом, расчёт повторяется через каждые \(2k - 2\) позиции. Примеры расчёта приведены в разделе <<Замечание>>.

Мальчик Вася постоянно всё забывает. Например, он забыл число \(k\), описанное выше. Но он помнит позицию, которую занимал в шеренге, а также какой номер он получил при расчёте. Помогите Васе понять, сколько натуральных чисел \(k\) подходят под данные ограничения.

Обратите внимание, что не существует расчёта для \(k = 1\).

Формат входных данных
Первая строка содержит одно целое число \(n\) (\(2 \leq n \leq 10^9\)) — позиция Васи в ряду в нумерации, начинающейся с \(1\).

Вторая строка содержит одно целое число \(x\) (\(1 \leq x < n\)) — номер, который Вася получил при расчёте.

Формат выходных данных
Выведите единственное целое число — количество различных \(k > 1\), которые подходят под данные ограничения.

Можно доказать, что при данных ограничениях ответ является конечным.

Примечание
В первом примере подходят \(k\) равные \(2, 3, 5, 6\).

Пример расчёта для этих \(k\):

k\№ \(1\) \(2\) \(3\) \(4\) \(5\) \(6\) \(7\) \(8\) \(9\) \(10\)
\(2\) \(1\) \(2\) \(1\) \(2\) \(1\) \(2\) \(1\) \(2\) \(1\) \(2\)
\(3\) \(1\) \(2\) \(3\) \(2\) \(1\) \(2\) \(3\) \(2\) \(1\) \(2\)
\(5\) \(1\) \(2\) \(3\) \(4\) \(5\) \(4\) \(3\) \(2\) \(1\) \(2\)
\(6\) \(1\) \(2\) \(3\) \(4\) \(5\) \(6\) \(5\) \(4\) \(3\) \(2\)

У Старца Летовца есть маленький прапраправнук по имени Летовёнок. Летовёнок очень любознательный и уже с ранних лет увлёкся математикой. Старец Летовец подарил ему набор чисел из натурального ряда, чтобы Летовёнок мог учиться считать. Но Летовёнок уже давно умеет считать и уже даже изучает делимость числа на три.

У Старца Летовца есть набор чисел. Эти числа можно склеивать друг с другом (или не склеивать вовсе), чтобы получать новые числа. Например, из набора чисел 12, 2 и 10 можно склеить число 12210, а можно 10212 — вариантов много, но выбрать придётся только один, потому что все числа в наборе в единственном виде.
Летовёнок задумался: какое максимальное количество чисел, делящихся на три, можно получить из этого набора?

Помогите ему решить эту задачу.

Формат входных данных

В первой строке ввода дано единственное число n (1<= n <=1000). Во второй строке ввода через пробел даны n чисел numi (1<=numi<=1000).


Формат выходных данных
Выведите одно число - максимальное количество чисел, кратных трём, которые можно получить из набора.


Примечание
В первом тестовом примере можно склеить числа 2 и 10 (получить 210 или 102) и в итоге получится 2 числа, кратные трём.

Во втором тестовом примере ничего склеивать не надо, так как. все числа уже кратны трём.

Старец Летовец, известный своими суперскиллами, решил научить своих учеников создавать "Последовательность Трёх Сил". Он дал им список чисел и сказал: "Отсортируйте эти числа так, чтобы они образовали Последовательность Трёх Сил. Вот правила:"

  1. Сила Тройки. Числа, которые делятся на 3, должны идти первыми.

  2. Сила Порядка. Среди чисел, делящихся на 3, меньшие числа должны идти перед большими.

  3. Сила Простоты. Среди чисел, не делящихся на 3, числа имеющие большее количество делителей должны идти раньше, чем числа имеющие меньшее количество делителей. При равном числе делителей, числа должны идти в порядке убывания.

Напишите программу, которая реализует это правило, и создаёт Последовательность Трёх Сил из любого списка целых чисел.

Формат входных данных
В первой строке записано натуральное число n (n <= 105) - количество целых чисел в списке. Далее, в n строках записано по одному целому числу numi ( -105 <= num<= -105).


Формат выходных данных
Выведите в одной единственной строке Последовательность Трёх Сил, составленную из исходного списка чисел.

Напишите программу, переводящую число из шестнадцатеричной системы счисления в двоичную.

Входные данные
Программа получает на вход строку, состоящую из цифр 0, ..., 9 и букв A, ..., F, являющуюся записью некоторого 16-ричного целого числа. Длина строки не превосходит 50 символов, первый символ в строке не равен 0. Необходимо вывести запись этого числа в двоичном виде без лидирующих нулей. 

Выходные данные
Выведите результат перевода.
Вывести все простые числа от M до N включительно.

Входные данные
В первой строке находятся разделённые пробелом M и N. 2 <= M <= N <= 1 000 000.

Выходные данные
Вывести числа в порядке возрастания, по одному в строке. Если между M и N включительно нет простых - вывести "Absent".
Сережа очень любит математические задачи. Недавно на математическом кружке ему рассказали, что такое НОД и НОК. 
НОД двух натуральных чисел a и b — это их наибольший общий делитель, то есть такое максимальное число x, что a делится на x и b делится на x. Например, \(НОД(24, 18) = 6\). А НОК целых чисел a и b — это их наименьшее общее кратное, то есть такое минимальное число x, что x делится на a и x делится на b. Например, \(НОК(24, 18) = 72\).
Сережа сразу заметил, что может существовать несколько пар чисел с одинаковыми НОД и НОК. Теперь он заинтересовался вопросом: если заданы числа a и b, насколько близко друг к другу могут быть два числа, у которых такие же НОД и НОК.
Помогите ему по заданным двум числам a и b найти такие числа x и y, что \(НОД(a, b) = НОД(x, y)\), \(НОК(a, b) = НОК(x, y)\), а их разность \(y - x\) минимальна. 

Входные данные 
В первой строке входного файла находятся два натуральных числа a и b (\(1 <= a, b <= 10^9\)).
 
Выходные данные 
Выведите два натуральных числа x и y (\(1 <= x <= y\)), таких, что \(НОД(a, b) = НОД(x, y)\)\(НОК(a, b) = НОК(x, y)\), а их разность \(y - x\) минимальна.
 
Примеры
Входные данные Выходные данные
1 3 4 3 4

В гостинице для жирафов администрация хочет запастись подушкам так, чтобы удовлетворить потребности любого своего возможного постояльца. Известно, что жирафам в зависимости от длины их шеи нужно сложить стопку подушек (в стопке одна или несколько подушек) толщиной от \(1\) до \(n\) сантиметров. При этом администрация хочет обойтись как можно меньшим числом подушек, а среди наборов подушек, удовлетворяющих этим требованиям, администрация выберет набор минимальной суммарной толщины, чтобы он занимал минимальный объём в шкафу.

Помогите администрации составить нужный набор подушек, позволяющий получить стопку любой высоты от \(1\) до \(n\) сантиметров включительно.

Формат входных данных
Во входных данных записано единственное целое число \(n\) — максимально возможная длина шеи жирафа (\(1 \leq n \leq 10^9\)).

Формат выходных данных
В единственной строке через пробел выведите толщину каждой подушки в этом наборе в произвольном порядке. Если ответов несколько, выведите любой из них.


Замечание

В примере из условия необходимо подобрать такой набор из минимального числа подушек, чтобы используя данные подушки удавалось сложить стопку любой целочисленной толщины от \(1\) до \(9\) см. Таким набором является набор из подушек толщиной \(1\), \(2\), \(3\), \(3\) см. Действительно, стопку толщины \(1\), \(2\), \(3\) см можно сложить из одной подушки. Оставшиеся числа получены так: \(4=1+3\), \(5=2+3\), \(6=3+3\), \(7=1+3+3\), \(8=2+3+3\), \(9=1+2+3+3\). Возможны и другие варианты ответа с тем же количеством подушек и их суммарной толщиной. Выполнить условие задачи, используя только три подушки, нельзя.

Тимофей готовится к ЕГЭ. Для отработки навыка скорости и точности поиска ответов на задания по теме «Системы счисления» ему часто приходится решать примеры типа «сколько значащих нулей (или единиц) содержит двоичная запись значения выражения 2a + 2b − 2c?». Значащими называются все цифры, кроме нулей в начале числа (которые обычно и не записываются). Например, десятичное число 20 в двоичной системе счисления записывается как 10100, и в этой записи две значащие цифры «1» и три значащие цифры «0».

Помогите Тимофею по известным a, b и c узнать ответ на задачу.

Входные данные

Программа получает на вход четыре целых неотрицательных числа: a, b, c и d, записанные в отдельных строках. Числа a, b и c соответствуют показателям степеней двоек в задании (0 ≤abc, ≤109). При этом гарантируется, что 2a + 2b − 2c > 0 и a ≠ b.

Число d равно либо 0, либо 1 — цифра, количество которых в значении выражения нужно узнать.

Выходные данные

Программа должна вывести одно неотрицательное целое число — ответ на задачу.

Пример

Ввод

Вывод

Пояснение

4
3
2
1

2

Нужно узнать количество единиц в двоичной записи значения выражения 24 + 23 − 22. Вычислим: 16 + 8 - 4 = 20. 2010 = 101002. Всего две единицы. Такой же результат можно получить, выполнив действия в столбик, не переводя числа в десятичную систему счисления (см. ниже).

 10000
+ 1000
 -----
 11000

 11000
-  100
 -----
 10100

Задано число \(n\). Требуется найти число от 1 до \(n\), включительно, которое имеет максимальное число положительных целых делителей.

Например, если \(n = 20\), то искомое число — 12, у него 6 делителей: 1, 2, 3, 4, 6 и 12.

Формат входных данных
На вход подается одно число \(n\) (\(1 \le n \le 100\,000\))

Формат выходных данных
Выведите на первой строке число от 1 до \(n\), включительно, которое имеет максимальное число делителей. На второй строке выведите число его делителей.

Если есть несколько чисел от 1 до \(n\) с максимальным числом делителей, выведите любое из них.

Дима работает на складе чисел. Он входит на склад с двоичным числом \(x=0\). Ему необходимо превратить свое число \(x\) в число \(s\). Для этого на складе есть два автомата для увеличения чисел.

Первый автомат увеличивает двоичное число \(x\) на \(1\) за \(a\) секунд. Он расположен слева от входа на склад, в \(p\) секундах ходьбы от входа.

Второй автомат умножает двоичное число \(x\) на \(2\) за \(b\) секунд. Он расположен справа от входа на склад, в \(q\) секундах ходьбы от входа.

Таким образом, если Диме понадобится дойти от одного автомата до другого, он потратит \(p+q\) секунд. Исходно он находится у входа на склад.

Помогите Диме узнать, за какое наименьшее количество секунд можно получить число \(x=s\) и вернуться ко входу на склад.
Число в двоичной системе счисления из \(n\) цифр, представимое в виде: \(\overline{a_1 a_2 \ldots a_n}\) \((a_i \in \{0, 1\})\), равно \(2^{n-1} \cdot a_1 + 2^{n-2} \cdot a_2 + \ldots + 2 \cdot a_{n-1} + a_n\). (\(a_1 = 1\) при \(n > 1\), то есть число не имеет ведущих нулей).

Формат входных данных
В первой строке даны два целых числа \(a\) и \(b\) в десятичной записи \((1 \le a, b \le 10^9)\) — время, которое потребуется автоматам для увеличения числа.

Во второй строке даны целые числа \(p\) и \(q\) в десятичной записи \((0 \le p, q \le 10^9)\) — расстояние от входа на склад до первого и второго автоматов.

В третьей строке дано число \(s\) в двоичной системе счисления без ведущих нулей (кроме случая \(s = 0\)). Длина числа \(s\) не превышает \(100\,000\) цифр.

Формат выходных данных
Выведите минимальное количество секунд, которое потребуется, чтобы из \(x=0\) получить \(x=s\), пользуясь автоматами, и вернуться ко входу на склад.

 

Примечание

В первом тесте необходимо получить число \(s=32 + 8 + 2 + 1 = 43\) в десятичной записи.

Оптимальная последовательность действий: Дима идет к первому автомату (2 секунды), прибавляет к числу единицу 5 раз (5 секунд), потом идет ко второму автомату (\(2+3=5\) секунд), умножает число 3 раза (\(3 \cdot 2 = 6\) секунд) и получает число 40, возвращается к первому автомату (\(3+2=5\) секунд), прибавляет единицу 3 раза (3 секунды), и идет ко входу на склад (2 секунды). Всего потрачено 28 секунд.

Во втором тесте у Димы с самого начала есть число \(x=0\).

Поделиться
Класснуть