Liczby pierwsze. Spoj C++

Liczby pierwsze. Spoj C++
MI
  • Rejestracja:około 11 lat
  • Ostatnio:11 miesięcy
  • 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:ponad 19 lat
  • Ostatnio:7 dni
1
Kopiuj
    unsigned long n = 0; // inicjalizujemy n
    int tab[n]; // tworzymy tablice na ZERO elementów
    cin >> n; // zmieniamy n

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
MI
  • Rejestracja:około 11 lat
  • Ostatnio:11 miesięcy
  • 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?

_13th_Dragon
A liczba 7 wg ciebie nie jest pierwszą ? A 11 ?
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
1

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


MI
  • Rejestracja:około 11 lat
  • Ostatnio:11 miesięcy
  • 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:prawie 14 lat
  • Ostatnio:około 3 godziny
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++.

szweszwe
Eratostenesa raczej. ;)
MI
  • Rejestracja:około 11 lat
  • Ostatnio:11 miesięcy
  • 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:ponad 19 lat
  • Ostatnio:7 dni
0

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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
MI
  • Rejestracja:około 11 lat
  • Ostatnio:11 miesięcy
  • 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.