Вопрос задан 21.06.2023 в 16:37. Предмет Информатика. Спрашивает Власова Алина.

С++.Даю 20 баллов. Есть код на нахождение количества и суммы делитель числа. Нужно его

оптимизировать. Выполняется очень долго сам код: #include < > int main() { int n, s = 0, ans = 0; std::cin >> n; for(int i = 1; i <= n; i++) { if(n % i == 0) { ans = ans + i; s++; } } std::cout << s << " " << ans; }
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Титова Валерия.

pair<int,int> dels(int k){

   int sm = 0;

   set<int> s;

   for(int i = 1; i * i <= k; i++){

       if(k % i == 0){

           s.insert(i);

           s.insert(k/i);

           sm += i + k/i * (i != k/i);

       }

   }

   return {s.size(), sm};

}

signed main(){

   int n;

   cin >> n;

   pair<int, int> ans = dels(n);

   cout << ans.first << " " << ans.second;

}

0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Для оптимизации кода нахождения количества и суммы делителей числа, вы можете использовать следующий код:

cpp
#include <iostream> int main() { int n, s = 0, ans = 0; std::cin >> n; for (int i = 1; i <= n / 2; i++) { if (n % i == 0) { ans += i; s++; } } ans += n; // Добавляем само число в сумму делителей. s++; // Увеличиваем количество делителей на 1, так как n делится само на себя. std::cout << s << " " << ans; return 0; }

Этот код оптимизирован так, чтобы проходиться только до половины числа n, так как все делители числа больше n / 2 можно найти, деля n на делители меньше или равные n / 2. Таким образом, вы сокращаете количество итераций в цикле, что ускоряет выполнение программы.

0 0

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос