Найти на отрезке n; m натуральное число, имеющее наибольшее количество делителей - C (СИ)
Формулировка задачи:
1.Найти на отрезке n; m натуральное число, имеющее наибольшее количество делителей
Заранее спасибо за помощь
Решение задачи: «Найти на отрезке n; m натуральное число, имеющее наибольшее количество делителей»
textual
Листинг программы
#include <iostream> #include <map> void maxDivider(int n, int m) { int min, max; int maxDiv = 0; std::map<int, int> mymap; std::map<int, int>::iterator it; ( n < m ) ? (min = n, max = m) : (min = m, max = n); for ( int i = min, counter = 0; i <= max; i++ ) { if ( i < 0 ) { for ( int j = i+1; j < -1; j++ ) { if ( i % j == 0 ) counter += 1; } } else { for ( int j = 2; j < i; j++ ) { if ( i % j == 0 ) counter += 1; } } mymap.insert(std::pair<int, int>(i, counter)); if ( maxDiv < counter ) maxDiv = counter; counter = 0; } for ( it=mymap.begin(); it!=mymap.end(); ++it ) { if ( maxDiv == it->second ) { std::cout << it->first << " has maximum dividers: " << it->second << std::endl; } } } int main() { int n, m; std::cin >> n >> m; maxDivider(n, m); return 0; }
Объяснение кода листинга программы
В этом коде реализована функция maxDivider
, которая принимает два натуральных числа n
и m
и выводит число, имеющее наибольшее количество делителей на отрезке от n
до m
.
- Сначала определяются переменные
min
,max
,maxDiv
иmymap
. - Затем используется условная конструкция, чтобы определить, какое число будет
min
, а какоеmax
. - В цикле
for
перебираются все числа отmin
доmax
. - Для каждого числа проверяется, является ли оно отрицательным. Если да, то перебираются все положительные делители, начиная с 2 и до числа, на которое делится исходное число (если делится без остатка). Если число не отрицательное, то перебираются все делители от 2 до этого числа.
- Для каждого найденного делителя увеличивается счетчик
counter
. - Если максимальное количество делителей, найденных до этого момента, меньше, чем
counter
, тоmaxDiv
присваивается значениеcounter
, аcounter
сбрасывается в 0. - После цикла
for
перебираются все пары чисел вmymap
. - Если значение
counter
для данного числа равноmaxDiv
, то это число выводится на экран. - В функции
main
считываются два натуральных числа, вызывается функцияmaxDivider
, а затем программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д