C++ liczby polpierwsze

0

Mam problem z programem ktory sprawdza czy liczba jest polpierwsza, poniewaz czasani pokazuje czy liczba polpierwsza a czasami nie .Mam wrazenie jakby ta linika nie dzialala

     else
    cout<<"liczba nie jest polpierwsza"<<endl;

oto caly kod

#include <iostream>
#include <conio.h>

using namespace std;

int main()
{
    {
        int pol;
        int licznik = 0;
        int a;
        cout << "Podaj liczbe polpierwsza" << endl;
        cin >> pol;
        for (int i = 2; i < pol; i++)
            if (pol % i == 0)
                cin >> a;
            else {
                for (int x = 2; x < i; x++)
                    if (i % x == 0)
                        licznik++;
                if (licznik == 0)
                    cout << "Liczba jest polpierwsza" << endl;
                else
                    cout << "liczba nie jest polpierwsza" << endl;
                break;
            }
    }
    return 0;
}
3

No, jakby Ci to powiedzieć, kod jest nieco z czapy, to co się dziwić, że daje błędne wyniki.
To co Ty robisz, to sprawdzasz, czy najmniejszy nie-dzielnik pol (tzn, liczba która nie dzieli pol), który jest większy niż 1, jest liczbą pierwszą.

To zupełnie nie jest to o co chodzi.

1

Cały kod związany z detekcją czy dana liczba jest pół-pierwsza, można przenieść do funkcji, tak jak w poniższym przykładzie:

bool isSemiprime( int number )
{
    auto primes {0};
    for( auto i {2} ; primes<2 && i*i <= number ; ++i ) while( number%i == 0 ) { number /= i; ++primes; }
    return primes == ((number>1)?1:2);
}

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