2 / 7
Mar 2017

Cześć!
Potrzebuję pomocy w pierwszym zadaniu które rozwiązuje na SPOJu...

Moim zdaniem kod działa... ale SPOJ nie akceptuje mojego rozwiązania.
Co mogę poprawić? Kod na moje oko działa, output jest identyczny...
(SIGSEGV)


include

bool czy_pierwsza(int n)
{
if(n<2) return false;

for(int i=2;i*i<=n;i++)
if(n%i==0) return false;
return true; }

int main()
{
int i=0;
int tab[2];
do{
std::cin>>tab[i];

i++;}while(i<3);

int o=0;

do{

if (czy_pierwsza(tab[o])==true) {std::cout<<"TAK"<<std::endl;}else{std::cout<<"NIE"<<std::endl;}
o++;
}while(o<3);

return 0;

}

  • created

    Mar '17
  • last reply

    Mar '17
  • 6

    replies

  • 1.3k

    views

  • 4

    users

  • 6

    links

Droga Joanno!
Dzień kobiet wprawdzie minął już jakiś czas temu, ale niech tam ....

  1. Pytania do zadań, zadawaj w dziale "Zbiór zadań". Możesz to jeszcze poprawić edytując temat tego wątku.
  2. Liczb do sprawdzenia może być dużó więcej, niż 3. [dokładnie do 100000]
  3. Jednak wcale nie musisz ich tablicować. Wczytujesz pierwszą, sprawdzasz, czy to pierwsza czy nie i od razu wypisujesz odpowiedź. Następnie kolejną i tak dalej.
  4. Jeżeli nie potrafisz testować u siebie, możesz skorzystać z ideone.com. wybierasz tam język [np c++] wklejasz kod, klikasz stdin i WKLEJASZ TESTY, a dopiero potem uruchamiasz. Twój kod: http://ideone.com/Wc0DlR3
  5. Zamiast wklejać tu [niepoprawnie] swój kod, możesz wkleić link do ideone z twoim kodem i testem.
  6. Warto, abyś też wkleiła tu link do strony z listą swoich zgłoszeń [tu] http://pl.spoj.com/status/nfw/all/start=05 - szalenie to ułatwi życie usiłującym Ci pomóc.
  7. Jest tego jeszcze więcej - stare wskazówki: http://213.192.104.217/phpBB3-spoj-pl-backup/viewtopic.php?f=1&t=1214&sid=65f2e5e4956e36668ec9a88069133e185
  8. Jak coś to nie bój się i nie krępuj pytać. PYTAJ! :wink:
  9. Ale nie zapomniej też najpierw [mowa o tym np w starym regulaminie] szukać [tematów dotyczących problemowego zadania] http://discuss.spoj.com/search?q=liczby%20pierwsze i nie leń się CZYTAĆ, CZYTAĆ, CZYTAĆ ....

PS
Na moje oko, jednak nie. Dla testu z zadania, powinno być:
TAK
NIE
NIE
i na tym koniec, a co masz na ideone.com dla tego testu i twojego kodu?

8 days later

Ok, napiszę więc ten kod kolejny raz.Umeściłam również taki, który działa już na pewno - potwierdzili mi to uzytkownicy innego forum ale SPOJ dalej nie przyjmuje. Podejrzewam że wynik jest negatywny ponieważ nie mam wymaganaj liczby testów. Ale kompletnie nie rozumiem czym jest liczba testów....Zmienię go tak, aby to nie były tylko 3 wyniki...

#include <iostream>
bool funkcja(int sprawdzana)
{
if(sprawdzana==3) return true;
int iteracja=2;
    do{
        if(sprawdzana%iteracja==0){return false;}
        else    
        {iteracja++;}
        }while(iteracja==sprawdzana-1);
        return true;
}
int main()
{   int pierwsza;
    int druga;
    int trzecia;
    std::cin>>pierwsza;
    std::cin>>druga;
    std::cin>>trzecia;
    if(funkcja(pierwsza)==true){std::cout<<"TAK"<<std::endl;}else{std::cout<<"NIE"<<std::endl;}
    if(funkcja(druga)==true){std::cout<<"TAK"<<std::endl;}else{std::cout<<"NIE"<<std::endl;}
    if(funkcja(trzecia)==true){std::cout<<"TAK"<<std::endl;}else{std::cout<<"NIE"<<std::endl;}
    return 0;
}

w tym zadaniu liczba testów to liczba liczb do sprawdzenia - w danych przykładowych zadania masz

3
11
1
4

pierwsza liczba (3) nie jest w tym przypadku do sprawdzenia, czy jest pierwsza, ale określa ile liczb należy sprawdzić

Użytkownicy innego forum zdaje się, że nie do końca wiedzą czym są liczby pierwsze i jak się je sprawdza.

Słusznie podejrzewasz, jednak z uwagi na to, że użytkownicy innego forum nie do końca wiedzą czym są liczby pierwsze i jak się je sprawdza, to poprawienie tego nie wystarczy.

Z treści zadania: n - liczba testów n<100000, w kolejnych liniach n liczb z przedziału [1..10000]

` Example

Input:
3
11
1
4

Output:
TAK
NIE
NIE

`

Wynika z tego, że w przykładzie liczba testów 'n' wynosi 3. Trzy kolejne liczby to są liczby do sprawdzenia, czyli testy liczb: 11, 1, 4. Odpowiedzi oznaczają, że Twój program powinien odpowiadać tak samo na sprawdzenia tych trzech liczb, czyli liczba 11 jest pierwsza (TAK), a liczby 1 i 4 nie są pierwszymi (NIE). Liczba 'n' może przyjmować wartości od 1 do 100000, więc Twój program powinien poprawnie działać dla każdej z tych możliwości.

#include <iostream>
bool funkcja(int sprawdzana)
{
	if(sprawdzana==1)return false;
if(sprawdzana==3) return true;
int iteracja=2;
    do{
        if(sprawdzana%iteracja==0){return false;}
        else    
        {iteracja++;}
        }while(iteracja==sprawdzana-1);
        return true;
}
int main()
{   int pierwsza;
    int druga;
    int trzecia;
    std::cin>>pierwsza;
    std::cin>>druga;
    std::cin>>trzecia;
    if(funkcja(pierwsza)==true){std::cout<<"TAK"<<std::endl;}else{std::cout<<"NIE"<<std::endl;}
    if(funkcja(druga)==true){std::cout<<"TAK"<<std::endl;}else{std::cout<<"NIE"<<std::endl;}
    if(funkcja(trzecia)==true){std::cout<<"TAK"<<std::endl;}else{std::cout<<"NIE"<<std::endl;}
    return 0;
}

A tak będzie ok?
Czyli jak rozumiem, liczba testów to ilość danych podawanych na wejściu które mają zwrócić wynik?

Nie będzie ok, ale miło, że zajęłaś się liczbą "1".

Czy wiesz, że przez ten warunek:
while(iteracja==sprawdzana-1);
Twoja pętla wykona się maksymalnie 2 razy?

Dalej ignorujesz fakt, że liczb do sprawdzenia może być do 100000.

Tak. Pobierz liczbę 'n' i w pętli sprawdzaj każdą liczbę podaną na wejściu - pętla ma się wykonać n razy.