Liczby pierwsze a SPOJ

0

Witam.Mam problem, który wiąże się z niby prostym zadankiem ze SPOJ'a a mianowicie tym -> http://pl.spoj.pl/problems/PRIME_T/ . Zadanko "niby" proste ponieważ skończyłem je (uważając że zrobiłem je dobrze) w pare minut. Jednak po zgłoszeniu go jako rozwiązanie wciąż otrzymuję komunikat o błędnej odpowiedzi. Dodam tylko że moja nauczycielka od informatyki nie potrafi stwierdzić dlaczego tak się dzieje i "zalicza mi to zadanie". Ja jednak dla własnego spokoju postanowiłem popytać na forum co jest nie tak?. Oto kod

#include <iostream>
#include <stdlib.h>


using namespace std;

int main(int argc, char *argv[])
{
    unsigned int n;
  cin>>n;
  unsigned int a[n];
  if(n <= 100000 && n > 0)
  {
      for(int i=0;i<n;i++)
      {
      cin>>a[i];
      
  }
  
     for(int i=0;i<n;i++)
     {
             if(a[i] != 1)
             {
         if(a[i]!=2)
         {
         if(a[i]%2 == 0)cout<<"NIE"<<endl;
         else cout<<"TAK"<<endl;
         }
     else cout<<"TAK"<<endl;
              }   
              else cout<<"NIE"<<endl;
     }
}
  
  
  

  return 0;
}

Dodam tylko , że w przykładzie widać ,że program powinien brać jedynke pod uwage jako liczbę nie-pierwszą. Dzięki za pomoc

0
unsigned int a[n];

Tak się nie tworzy tablic dynamicznych...

a[i]%2

&1 może byłoby wydajniejsze.


Po co tak w ogóle wczytujesz te liczby do pamięci?
Edit: ten kod to w ogóle porażka i **na pewno** nie wyznacza liczb pierwszych. http://ideone.com/InOpy ``` 1 NIE 2 TAK 3 TAK 4 NIE 5 TAK 6 NIE 7 TAK 8 NIE 9 TAK 10 NIE ```
1

Polecam lekturę http://pl.wikipedia.org/wiki/Sito_Eratostenesa bo Twój program sprawdza czy liczba jest parzysta czy nie...

0
lewuaza napisał(a):

Polecam lekturę http://pl.wikipedia.org/wiki/Sito_Eratostenesa bo Twój program sprawdza czy liczba jest parzysta czy nie...

w dodatku nie robi tego dokładnie xD

0

Jeśli chcesz z kolei osiągnąć bardzo dobre czasy to proponuję hardcodowanie tablicy liczb lub dużego switch'a.

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