[c++] Dzielniki liczby

0

Witam!
Mam za zadanie wypisać wszystkie dzielniki liczby podanej przez użytkownika (n <= 10^9). Mam limit czasu 10s - i w tym problem.
Mój kod wygląda tak:

#include <iostream>

using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    long long n;
    cin >> n;
    for(int i=1; i<=n/2; i++)
    {
        if(n % i == 0)
            cout << i << endl;
    }
    cout << n;
    return 0;
}
 

Napisanie programu korzystając z cstdio (printf/scanf) nie dało poprawy czasu. Dla n = 10^9 = 1 000 000 000 mój program liczy dzielniki ponad 17 s!
Jak można zoptymalizować algorytm znajdowania dzielników liczby, by program działał szybciej?

eryk09

0

Da się (znaj łaskę Pana i dostaniesz gotowca):

#include <iostream>
#include <cmath>

using namespace std;

int main() {
    unsigned long long n;
    cin >> n;
    for(int i=1; i<=sqrt(n); i++) {
        if(n % i == 0)
            cout << i << ' ' << n / i << '\n';
    }
    cout.flush();
    return 0;
}
0

Wielkie dzięki, tylko że ja mam wypisać dzielniki w porządku rosnącym, a to co wypisuje ten program robi to nie rosnąco. Spróbuję zaraz wczytać to do tablicy i posortować, ale nie wiem, czy zmieszczę się w czasie ;/

0

@winerfresh, najwyżej trójka.

#include <iostream>
#include <cmath>

using namespace std;

int main() {
    unsigned long long n;
    cin >> n;
    double gg=sqrt(n);
    for(int i=1; i<=gg; i++) {
        if(n % i == 0)
            cout << i << ' ' << n / i << 'n';
    }
    cout.flush();
    return 0;
}
0

@Edit
Nie przejdzie z tablicą

1
#include <iostream>
#include <cmath>

using namespace std;

int main() {
    unsigned long long n;
    cin >> n;
    double gg=sqrt(n);
    for(int i=1; i<=gg; i++) 
    {
        if(n % i == 0)
            cout << i << '\n';
    }
    for(int i=int(gg); i>=2; i--) 
    {
        if(n % i == 0)
            cout << n / i << '\n';
    }
    cout.flush();
    return 0;
}
0

A co chcesz sortować? LoL

0

Jak napiszę w poście (w kodzie) '\n' to wychodzi 'n'. wtf?

0

Jesteście wielcy, dzięki!

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