Помогите ускорить код

160
30 августа 2021, 10:10

есть код. он принимает число и раскладывает на множители. сам код:

#include <iostream>
#include <cmath>
using namespace std;
bool is_prime(int m) {
    for (int i = 2; i <= sqrt(m); i++)
        if (m % i == 0) return false;
    return true;
}
int main() {
    int n;
    int i = 1;
    cin >> n;
    if (is_prime(n)) {
        cout << n << endl;
    }
    else {
        while (n != 1) {
            i++;
            if (is_prime(i)) {
                while (n % i == 0) {
                    n /= i;
                    cout << i;
                    if (n != 1) cout << "*";
                    else break;
                }
            }
        }
    }
    return 0;
}

как это можно ускорить?

Answer 1
int n;
cin >> n;
while(n%2 == 0)
{
    cout << "2 ";
    n /= 2;
}
if (n > 2)
{
    for(int i = 3; i*i <= n; i += 2)
    {
        while(n %i == 0)
        {
            cout << i << " ";
            n /= i;
        }
    }
    if (n > 1) cout << n;
}
cout << endl;

Вот сравнение скоростей: http://ideone.com/8TY65i

READ ALSO
Stack overflow в рекурсивной функции

Stack overflow в рекурсивной функции

По ходу выполнения программы возникает исключение "Необработанное исключение по адресу 0x79E917D7 (ucrtbaseddll) в ConsoleApplication7

92
Возникли проблемы при вычислении суммы бесконечного ряда

Возникли проблемы при вычислении суммы бесконечного ряда

Написал код, согласно требованиям (задание приложу в скриншоте)Все вычисляет,ошибок не выдает, однако значение проверки суммы ряда отличается...

117
Как добавить программу в автозагрузку используя WinAPI (C/C++)

Как добавить программу в автозагрузку используя WinAPI (C/C++)

Какая функция, описание которой находится в заголовочном файле windowsh (насколько я знаю, она там), отвечает за автозапуск и как прописать, заранее...

128
как поставить картинке position: sticky;?

как поставить картинке position: sticky;?

Есть код, и надо к картинкам добавить position: sticky;, возможно ли это сделать? У меня лично не получается

130