liczby pierwsze

0

witam niedawno rozpoczalem przygode z java, i nie wiem co nie jest zle w moim kodzie. zadanie jest ze spoja :
Sprawdź, które spośród danych liczb są liczbami pierwszymi
Input

n - liczba testów n<100000, w kolejnych liniach n liczb z przedziału [1..10000]
Output

Dla każdej liczby słowo TAK, jeśli liczba ta jest pierwsza, słowo: NIE, w przeciwnym wypadku.
Example

Input:
3
11
1
4

Output:
TAK
NIE
NIE

 package first;
import java.util.Scanner;
public class first 
{
	public static void main(String[] args) 
	{
		Scanner input = new Scanner (System.in);
			int t = input.nextInt();
			boolean tablica []=new boolean[t-1];
		for(int p=0;p<=t-1;p++)
		{
			int n = input.nextInt();
			boolean Tak = true;
			for(double i=2;i<=Math.sqrt(n);i++)
			{
				if(n%i==0)
				{
					i=Math.sqrt(n);
					Tak = false;
				}
			}
			if(Tak==false)
			{
				tablica[p]=true;
			}
		}
		input.close();
		for(int x=0;x<=t-1;x++)
		{
			if(tablica[x])
			{
				System.out.println("NIE");
			}
			else
			{
				System.out.println("TAK");
			}
		}
	}
}
0

Nie, nie, nie.
Zacznij od wydzielenia tego kodu na funkcje/metody/jak zwał tak zwał.

Na oko masz błąd tutaj new boolean[t-1] oraz dziwnie skonstruowany warunek tu: p<=t-1. Nazwy zmiennych także z czapy wyjęte...

0

Skoro znany jest zakres liczb ([1..10000]), to wydajniejsze będzie wykorzystanie sita Eratostenesa.
Działania na liczbach zmiennoprzecinkowych są przybliżone. Bezpieczniejszy jest taki kod:

            for(int i=2;i<=(int)Math.sqrt(n);i++)
            {
                if(n%i==0)
                {
                    Tak = false;
                    break; 
                }
            }
            if(!Tak)
            {
                tablica[p] = true;
            }

(Warunek Tak==false wygląda zabawnie.)
Dlaczego nazwałeś klasę first, dlatego, że to Twoja pierwsza klasa, czy dlatego, że chodzi o liczby pierwsze? Liczba pierwsza po angielsku, to prime number.

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