Liczby pierwsze.

0

Próbuję napisać program do sprawdzania liczb pierwszych. Program prawidłowo pobiera dane, ale "zacina się" podczas ich sprawdzania. Z góry dziękuję za pomoc.

import java.util.Scanner;

public class LiczbyPierwsze {
    public static void main(String args[]) {
        // pola        
        int n = 1;
        int cyfra = 0;
        Scanner nOdczyt = new Scanner(System.in);
        Scanner cyfraOdczyt = new Scanner(System.in);
        
        System.out.println("### Sprawdzanie liczb pierwszych. ###");
        System.out.println("Podaj liczbę testów, które chcesz przeprowadzić.");
        
        // tworzenia tablicy liczb, które chcemy sprawdzić
        n = nOdczyt.nextInt();
        int tab[] = new int[n];
        for(int i = 0; i < tab.length; i++) {
            cyfra = cyfraOdczyt.nextInt();
            tab[i] = cyfra;
        }
        
        // sprawdzanie czy liczba jest pierwsza
        int p = 2;
        for(int i = 0; i < tab.length; i++) {
            if(tab[i] == p) System.out.println("TAK");
            else {
                if(tab[i] % p == 0) System.out.println("NIE");
                else p++;
            }
        }
    }
}

 
0

Po co Ci dwa obiekty typu Scanner?

for(int i = 0; i < tab.length; i++) {
    tab[i] = nOdczyt.nextInt();
}

Liczba jest pierwsza jeśli nie ma dzielników. Kod dla jednej liczby n (|n|>1):

boolean jestPierwsza = true;
for(int p=2;p<=Math.sqrt(n);p++)
{
    if(n % p == 0)
    {
        jestPierwsza = false;
        break;
    }
}
0

Zastanów się jak zareaguje twój program jeżeli w tablice będzie:
3 4 5 6 7 8 9 10
Pierwszą liczbę czyli 3 sprawdzi czy równa się 2, ponieważ nie równa to sprawdzi czy jest podzielna przez 2 też nie, więc nić nie wypisze i zwiększy p do 3
Drugą liczbę czyli 4 sprawdzi czy równa się 3, ponieważ nie równa to sprawdzi czy jest podzielna przez 3 też nie, więc nić nie wypisze i zwiększy p do 4
Trzecią liczbę czyli 5 sprawdzi czy równa się 4, ponieważ nie równa to sprawdzi czy jest podzielna przez 4 też nie, więc nić nie wypisze i zwiększy p do 5
idt.

0

Dziękuję za odpowiedź, strasznie głupi błąd z mojej strony. ;)

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