Найти на отрезке 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.

  1. Сначала определяются переменные min, max, maxDiv и mymap.
  2. Затем используется условная конструкция, чтобы определить, какое число будет min, а какое max.
  3. В цикле for перебираются все числа от min до max.
  4. Для каждого числа проверяется, является ли оно отрицательным. Если да, то перебираются все положительные делители, начиная с 2 и до числа, на которое делится исходное число (если делится без остатка). Если число не отрицательное, то перебираются все делители от 2 до этого числа.
  5. Для каждого найденного делителя увеличивается счетчик counter.
  6. Если максимальное количество делителей, найденных до этого момента, меньше, чем counter, то maxDiv присваивается значение counter, а counter сбрасывается в 0.
  7. После цикла for перебираются все пары чисел в mymap.
  8. Если значение counter для данного числа равно maxDiv, то это число выводится на экран.
  9. В функции main считываются два натуральных числа, вызывается функция maxDivider, а затем программа завершается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.867 из 5
Похожие ответы