Dzielniki i czynniki pierwsze liczb

Odpowiedz Nowy wątek
2019-10-04 23:12
0

Cześć!
Mam problem z zadaniem, próbowałem je rozwiązać samodzielnie ale niestety nie potrafię.
Tutaj jest polecenie zadania:
Dzielniki i czynniki pierwsze liczby
Napisz program który wyznaczy rozkład liczby na czynniki pierwsze oraz wypisze wszystkie
dzielniki liczby i ilość dzielników.
Wejście:
Liczba x (0<=x<=1000000)
Wyjście:
W kolejnych liniach program powinien wypisać:
• Linia 1: czynniki pierwsze (oddzielone spacją) lub słowo „BRAK” jeżeli liczby nie da się
rozłożyć na czynniki pierwsze
• Linia 2: dzielniki (oddzielone spacją) lub słowo „BRAK” jeżeli liczba nie ma żadnych
dzielników
• Linia 3: ilość dzielników

Generalnie program działa, ale nie wiem jak napisać jaka jest ilość dzielników i przy nie których liczbach są złe wyniki. Jak daje program do sprawdzenia to mam 0 punktów także coś jest nie tak.
Miałbym prośbę aby napisać co tu nie gra :D i podesłać rozwiązanie.

Tutaj są moje wypociny:

#include <iostream>
#include <cmath>
#include <cstdlib>

using namespace std;

bool czy_pierwsza(int n)
{
    if(n<2)
        return false;

    for(int i=2;i*i<=n;i++)
        if(n%i==0)
            return false; 
    return true;
}

void czynniki(unsigned n)
{

if(czy_pierwsza(n))
        cout<<"BRAK"<<endl;
        else if(n == 1)
        {
           cout<<"BRAK"<<endl;
           cout<<"1";
        }

    else
    {
unsigned g,i;

    g = sqrt(n);

    for(i = 2; i <= g; i++)
    {
        while(n % i == 0)
        {
            cout << i << " ";
            n /= i;
        }
    }
    cout<<endl;
}
}

int main()
{
int b;

    unsigned long long n;
    cin>> n;
    czynniki(n);
    long long gg=sqrt(n);
    if(n>1)
    {
    for(int i=1; i<=gg; i++) 
    {
        if(n % i == 0)
            cout << i << " ";
    }
    for(int i=int(gg); i>=2; i--) 
    {
        if(n % i == 0)
            cout <<n / i<<" ";
        }
    cout<<n<<endl;
    cout.flush();
}

if(czy_pierwsza(n))
{
  cout<<"2";
}
    return 0;

}
edytowany 2x, ostatnio: Jan Ciupa, 2019-10-05 00:25
Co się dzieje, nie kompiluje się, wyjątek, złe wyniki? - lion137 2019-10-05 00:19

Pozostało 580 znaków

2019-10-05 14:18
0

@_13th_Dragon: zgłosił kosmetyczne poprawki, które zmniejszą ilośc kodu i poprawią czytelność, chociaż z samym algorytmem sita bym nie kombinował, natomiast istota i złożoność są bez zmian.


edytowany 1x, ostatnio: lion137, 2019-10-05 14:19

Pozostało 580 znaków

2019-10-05 14:26
0

Nie prawda, masz złożoność O(N) zaś da się zrobić O(sqrt(N))


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2019-10-05 15:06
0

Chodzi Ci o factors, to prawda, to jest poprawiony jego kod, niewielkie usprawnienie daje O(sqrt(n)).


Pozostało 580 znaków

2019-10-06 10:37
0

napisane 4mc temu:
https://wandbox.org/permlink/ODZ2TL4VgjJv6b0c


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Pozostało 580 znaków

2019-10-06 13:23
0

Przy tym kodzie wyskakuje błąd kompilacji

Pozostało 580 znaków

2019-10-06 17:40
0
Jan Ciupa napisał(a):

Przy tym kodzie wyskakuje błąd kompilacji

Więc masz za stary kompilator.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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