Przyspieszenie programu pokazującego dzielniki danej liczby

0

program pokazuje dzielniki liczby ale jest wolny:-(

coś można przyspieszyć ?


#include <iostream>
using namespace std;
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    long long int l;
    cin >> l;
    for (long long int i = l; i > 0; i--)
    {
        if (l % i == 0)
            cout << l / i <<" ";
    }
    return 0;
}

Oczekuje się rozwiązania działającego w czasie proporcjonalnym do pierwiastka z N (liczba naturalna, której dzielników szukamy).
Może gdy znajdziemy dzielnik x, mamy też dzielnik N / x ale nie wiem jak to zrobić :-(

1

Masz te dzielniki wypisywać w jakiejś konkretnej kolejności? Jak nie, to po prostu w pętli do sqrt(l) wypisuj i i l / i, w przeciwnym wypadku zapamiętaj sobie dzielniki mniejsze, a potem wypisz wszystkie w żądanej kolejności.

3

Taka uwaga czytelnościowa na marginesie -- nie ma chyba gorszej nazwy zmiennej niż l (małe L) -- może z nim jedynie konkurować O (duże o)...

0

Zmieniłem ale dalej za wolny :-(


#include <iostream>

using namespace std;

int main()
{
 ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    int n;
    cin >> n;
    for(int i=1; i<=n/2; i++)
    {
        if(n % i == 0)
            cout << i << " ";
    }
    cout << n;
    return 0;
}
0

To ze spoja? Poza tym sqrt i dzielenie to różne działania.

0

Jak brzmi odpowiedź na moje pytanie?

Masz te dzielniki wypisywać w jakiejś konkretnej kolejności?

1

Mialeś chyba "blind spot", wszystkim się zdarza:). @kq napisał Ci dokładnie co trzeba zrobić, jeśli nie Potrzebujesz jakiejś specyficznej kolejności, to:

for (int i = 1; i < sqrt(n) ;i++){
    if ( n % i == 0)
        cout << i << " " << n / i << " "; 
    }
2

Już lepiej tak:

for (int i = 1; i * i <= n; i++){
0
kq napisał(a):

Jak brzmi odpowiedź na moje pytanie?

Masz te dzielniki wypisywać w jakiejś konkretnej kolejności?

w kolejności rosnącej

wejście 8
wyjście 1 2 4 8

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0