Форум программистов, компьютерный форум, киберфорум
Thinker
Войти
Регистрация
Восстановить пароль
Старый
Рейтинг: 4.00. Голосов: 1.
Рекурсивные комбинаторные алгоритмы
Запись от Thinker размещена 10.07.2013 в 10:27. Обновил(-а) Thinker 10.07.2013 в 19:12
Показов 5083 Комментарии 2

Задача о бандероли
За пересылку бандероли надо уплатить 100 рублей. Сколькими способами можно оплатить ее марками стоимостью 1,2,3,5 рублей, если два способа, отличающиеся порядком марок, считаются различными (запас марок различного достоинства считаем неограниченным).
Используем рекурсивную функцию
F(n) = F(n-1) + F(n-2) + F(n-3) + F(n-5)
с начальными условиями
F(0) = 1,
F(x) = 0 при x < 0
получается 117372865913707249 способов. обычной рекурсией его не получить. Только с сохранением уже подсчитанного:
Кликните здесь для просмотра всего текста
C++
1
#include<iostream>
...
Аватар для Thinker
Размещено в Без категории
Thinker вне форума
Старый
Быстрый алгоритм Евклида вычисления НОД
Запись от Thinker размещена 10.07.2013 в 10:03
Показов 2076 Комментарии 0

Заинтересовал вопрос о различных реализациях алгоритма Евклида для неотрицательных целых чисел. Ниже привожу алгоритмы, собственноручно написанные, исходя из теоретического материала. Каждый алгоритм можно модифицировать в ту или иную сторону.

Считается, что бинарный алгоритм работает быстрее, но тесты показывают, что во многих случаях два первых алгоритма работают быстрее бинарного.
1. обычный алгоритм Евклида через остатки
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
long Nod(long a, long b)
{
    while (a && b)
        if (a >= b)
           a %= b;
        else
...
Аватар для Thinker
Размещено в Без категории
Thinker вне форума
Старый
Быстрое нахождение суммы делителей натурального числа
Запись от Thinker размещена 10.07.2013 в 09:58. Обновил(-а) Thinker 11.07.2013 в 09:55
Показов 2324 Комментарии 0

Приведу быстрый алгоритм нахождения суммы делителей. Сумма ищется по формуле
https://www.cyberforum.ru/cgi-bin/latex.cgi?S(a) = \frac{p_1^{a_1+1}-1}{p_1-1}\cdot\frac{p_2^{a_2+1}-1}{p_2-1}...\cdot\frac{p_n^{a_n+1}-1}{p_n-1}, где
https://www.cyberforum.ru/cgi-bin/latex.cgi?a=p_1^{a_1}...p_n^{a_n} - каноническое разложение числа a.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
unsigned long Sum(unsigned long a)
{
   unsigned long sum = 1, k = 1, i;
   if (a == 1)
      return a;
   while ((a & 1) == 0)
   {
      k <<= 1;
      a >>= 1;
   }
   k = (k << 1) - 1;
   if (a == 1)
      return k;
   else
...
Аватар для Thinker
Размещено в Без категории
Thinker вне форума
Старый
Рейтинг: 5.00. Голосов: 1.
Быстрое нахождение количества делителей натурального числа
Запись от Thinker размещена 10.07.2013 в 09:54. Обновил(-а) Thinker 11.07.2013 в 09:55
Показов 2210 Комментарии 0

Часто требуется найти количество делителей натурального числа и, по возможности, это надо осуществить очень быстро. В следующем быстром алгоритме количество делителей ищется по формуле
https://www.cyberforum.ru/cgi-bin/latex.cgi?count(a) = (a_1+1)(a_2+1)...(a_n+1), где
https://www.cyberforum.ru/cgi-bin/latex.cgi?a=p_1^{a_1}...p_n^{a_n} - каноническое разложение числа a.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
// быстрый алгоритм без использования дополнительной памяти
unsigned long Count(unsigned long a)
{
   unsigned long count = 1, k = 0, i;
   if (a == 1 || a == 2)
      return a;
   while ((a & 1) == 0)
...
Аватар для Thinker
Размещено в Без категории
Thinker вне форума
Старый
Быстрая проверка натурального числа на простоту
Запись от Thinker размещена 10.07.2013 в 09:49
Показов 3653 Комментарии 0

Часто возникает задача проверки натурального числа на простоту. При этом имеются вероятностные и детерминированные методы проверки. Здесь рассматриваются только детерминированные алгоритмы, дающие 100% ответ на вопрос о простоте.

Хорошо известно такое утверждение: если натуральное число n>1 не делится ни на одно простое число, не превосходящее , то оно простое. В связи с этим получается самый простой способ проверки на простоту алгоритм
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
int Prime(unsigned long a)
{
   unsigned long i;
   if (a == 2)
      return 1;
   if (a == 0 || a
...
Аватар для Thinker
Размещено в Без категории
Thinker вне форума
Новые блоги и статьи
Какая разница между операторами == и === в сравнениях в JavaScript
bytestream 21.01.2025
В мире веб-разработки JavaScript занимает особое место как динамический язык программирования, предоставляющий разработчикам широкий набор инструментов для создания интерактивных веб-приложений. . . .
Из чего и как собрать свой домашний кинотеатр
bt_guru 21.01.2025
Создание домашнего кинотеатра: от идеи до реализации В современном мире домашний кинотеатр стал неотъемлемой частью комфортного жилого пространства, предоставляя возможность наслаждаться. . .
Ошибки стиральных машин
bt_guru 21.01.2025
Современные стиральные машины представляют собой сложные электронные устройства, оснащенные множеством датчиков и систем контроля. Они способны самостоятельно определять вес загруженного белья,. . .
Копирование (маппинг) объектов в JavaScript
bytestream 21.01.2025
В современной разработке программного обеспечения копирование объектов представляет собой фундаментальную операцию, которая требует особого внимания и понимания. Маппинг объектов в JavaScript – это. . .
Как работать с Apache Kafka в C# .NET
bytestream 21.01.2025
Apache Kafka представляет собой распределенную платформу потоковой передачи данных, которая произвела революцию в области обработки больших объемов информации в реальном времени. Эта система,. . .
Как использовать RabbitMQ в C# .NET
bytestream 21.01.2025
RabbitMQ представляет собой мощный брокер сообщений, который эффективно решает эту задачу, обеспечивая надежную передачу данных между множеством приложений. Этот инструмент реализует протокол AMQP. . .
Как объединить последние коммиты в Git
bytestream 21.01.2025
В мире разработки программного обеспечения система контроля версий Git стала незаменимым инструментом для управления исходным кодом. Одной из наиболее полезных, но порой сложных для освоения функций. . .
Как запушить новую локальную ветку (branch) в удалённый репозиторий Git и отслеживать её
bytestream 21.01.2025
В современной разработке программного обеспечения система контроля версий Git стала неотъемлемым инструментом для эффективного управления кодом и организации командной работы. Одной из ключевых. . .
Как создать директорию и все родительские директории, указанные в пути, с помощью Python
bytestream 21.01.2025
Python предоставляет мощные инструменты для работы с файловой системой через встроенные модули os и pathlib, которые значительно упрощают процесс манипуляции директориями. Эти модули содержат. . .
Как работать с массивами в JavaScript
bytestream 21.01.2025
Массивы в JavaScript представляют собой один из фундаментальных типов данных, который позволяет хранить упорядоченные коллекции различных элементов в одной переменной. Эта структура данных является. . .
Какая максимальная длина адреса (URL) в различных браузерах и стандартах
bytestream 21.01.2025
В современном мире интернет-технологий URL-адреса (Uniform Resource Locator) играют фундаментальную роль в функционировании веб-пространства. Эти уникальные идентификаторы ресурсов стали неотъемлемой. . .
Как сбросить локальный репозиторий до состояния удалённого репозитория Git
bytestream 21.01.2025
При разработке программного обеспечения с использованием системы контроля версий Git разработчики часто сталкиваются с необходимостью синхронизации локального и удаленного репозиториев. Данная задача. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru