Liczby pierwsze. Spoj C++

Liczby pierwsze. Spoj C++
MI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 22
0

Robie zadanie z Spoj.com

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

I wyskakuje mi taki błąd kompilacji: (SIGSEGV) Przez co nie mogę mieć zaliczonego tego zadania.

#include <iostream>
using namespace std;
int main()
{
unsigned long n = 0;
int tab[n];
cin >> n;
if(n >= 1 && n < 100000)
{
int i = 0;
cin >> tab[i];
while(i < n - 1){
++i;
cin >> tab[i];
}
}
for(int i = 0; i < n; ++i)
{
if(tab[i] == 2 || tab[i] == 5 || tab[i] == 3)
{
cout << "TAK" << endl;
}else if(tab[i] == 1 || tab[i] == 0 || tab[i] % 2 == 0 || tab[i] % 3 == 0 || tab[i] % 5 == 0){
cout << "NIE" << endl;
}else{
cout << "TAK" << endl;
}
}
}

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
1
Kopiuj
    unsigned long n = 0; // inicjalizujemy n
    int tab[n]; // tworzymy tablice na ZERO elementów
    cin >> n; // zmieniamy n
MI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 22
0

Poprawiłem to co było i teraz mi się pojawił komunikat: "błędna odpowiedź". Może mam z tego utworzyć funkcje ? Albo zrobić inną metoda?

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
1

Zacznij od zmiany algorytmu sprawdzania, czy liczba jest pierwsza...

MI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 22
0

To ja muszę to zrobić w jakiejś pętli? Czy jest możliwość żebym naprawił to co jest albo poprawił czy muszę do tego podejść od początku.

SI
  • Rejestracja: dni
  • Ostatnio: dni
0

Poczytaj sobie o sicie Euklidesa, a tablica przyda ci się tylko do zapamiętywania które liczby są pierwsze (wczytujesz, sprawdzasz i od razu wypisujesz). Aczkolwiek bez "sita" i tablicy też się da przejść to zadanie w c++.

MI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 22
0

Ok przepisałem to jeszcze raz i zrobiłem coś takiego, dziwnie mi to wychodzi bo często pojawia mi się za dużo tak i nie, nie wiem do końca co jest źle.
int main()
{
unsigned long liczbaprob;
cin >> liczbaprob;
int tab[liczbaprob];
for(int i = 0; i < liczbaprob; ++i)
{
cin >> tab[i];
}
for(int i = 0; i < liczbaprob; i++){
for(int p=2; p < tab[i]; p++){
if(tab[i] % p == 0){
cout << "NIE" << endl;
break;
}
}
cout << "TAK" << endl;
}
}

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

Przecież u ciebie TAK wypisuje się zawsze, nie widzisz tego?

MI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 22
0

Dzięki, trochę to poprawiłem i udało się :D

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.