Liczby pierwsze.

2012-11-24 00:42

Rejestracja: 7 lat temu

Ostatnio: 6 lat temu

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++;
            }
        }
    }
}
edytowany 1x, ostatnio: olesio, 2012-11-24 01:04

Pozostało 580 znaków

2012-11-24 01:18
Moderator

Rejestracja: 11 lat temu

Ostatnio: 1 dzień temu

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;
    }
}

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 3x, ostatnio: bogdans, 2012-11-24 01:19

Pozostało 580 znaków

2012-11-24 01:18

Rejestracja: 14 lat temu

Ostatnio: 4 dni temu

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.


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

2012-11-24 01:31

Rejestracja: 7 lat temu

Ostatnio: 6 lat temu

0

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

Pozostało 580 znaków

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