Liczby pierwsze ze SPOJ - co zrobiłem źle?

0

Witam
Postanowiłem na SPOJu zacząć rozwiązywać zadania (http://pl.spoj.com/problems/PRIME_T/) lecz juz na pierwszym mam problem, chodzi o to że wszystko według mnie działa dobrze w Netbeans i na http://ideone.com/BXM91y

import java.util.Scanner;


public class Main {

  
    public static void main(String[] args) 
    {
       Scanner s=new Scanner (System.in);
       double a;
      
       do{
           
       a=s.nextInt();
       if(a>2)
       {
           int b=(int) Math.sqrt(a);
           boolean zmien= false;
        for(int i=2; i<=b;i++)
        { 
            if(a%i==0)
            {    
                System.out.println("NIE");
                zmien=true;
            }
        }
            if(zmien==false)
                System.out.println("TAK");  
       }
       else
       System.out.println("NIE");
        }while(s.hasNextInt());
       
       }
       }
     

Jeśli mogę kogoś prosić o pomoc we wskazaniu błędu w tym kodzie.
Lub jeśli nie ma błędu to też byłbym wdzięczny w upewnieniu mnie że wszystko jest ok. Dzięki.

0

Działać może i działa, ale jest nieoptymalne.
Sito Erastotenesa, coś ci to mówi?

I mógłbyś nauczyć się formatować kod i wstawiać w odpowiednie tagi, bo źle to się czyta.

0

System.out.println("NIE"); wyrzuc poza petle. Albo dodaj break.

0

2 jest liczba pierwszą - a Twój algorytm twierdzi, że nie.
Przerwij działanie pętli w momencie. kiedy juz wiesz, że to nie może być liczba pierwsza. Ty robisz coś takiego:
np. dla liczby 6 już w pierwszym obiegu wiesz że dzieli się przez 2 więc nie jest pierwsza. I co robisz? Lecisz z pętlą dalej... Po co?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.