Cześć,
ja również walczę z tym zadaniem.w języku C++
Mój kod to:
#include <iostream>
using namespace std;
float liczba[3];
int ile;
bool czy_pierwsza(int n)
{
if (n<2)
return false; //gdy liczba jest mniejsza niż 2 to nie jest pierwszą
for (int i = 2; i*i <= n; i++)
if (n%i == 0)
return false; //gdy znajdziemy dzielnik, to dana liczba nie jest pierwsza
return true;
}
int main()
{
int ile;
cin >> ile;
for (int i=0;i<ile;i++)
{
cin >> liczba[i];
if (czy_pierwsza(liczba[i]) && liczba[i] <2)
{
cout << "TAK" << endl;
}
else cout << "NIE" << endl;
}
system("PAUSE");
return 0;
}
sędzia wyrzuca mi :błąd wykonania (SIGSEGV), Podejrzewam, że chodzi o przedział n<1000000 ale pewności nie mam. Z góry dziękuje za wszelkie sugestie.
kod:
#include <iostream>
using namespace std;
long int n;
bool czy_pierwsza(long int liczba){
if(liczba < 2) return false;
for(int i=2;i<(liczba/2);i++)
if(liczba % i == 0) return false;
return true;
}
int main()
{
long int liczby[10000];
cin>>n;
for(int i=0;i<n;i++){
cin>>liczby[i];
}
cout<<endl;
for(int i=0;i<n;i++){
if(czy_pierwsza(liczby[i]) == true) cout<<"TAK"<<endl;
else cout<<"NIE"<<endl;
}
return 0;
}
otóż wrzucam te rozwiązanie do pierwszego zadania LICZBY PIERWSZE z łatwego działu, wybieram każdy z możliwych kompilatorów i za każdym razem "BŁĄD ODCZYTU". Co nie tak?
Witam
Stawiam pierwsze kroki zarówno w c++ jak i na tym forum. Zabrałem się za pierwsze zadanie z listy i padło na liczby pierwsze. Program wydaje mi się działać na moim kompilatorze jednak sędzia odrzuca moje rozwiązanie. Czy ktoś by mógł spróbować podpowiedzieć mi dlaczego?
#include <iostream>
using namespace std;
int testy, liczby, wynik, suma;
int n=0;
int tab[10000];
int main()
{
cin>>testy;
for(int i=0; i<testy;i++)
{
cin>>liczby;
for(int j=2; j<=liczby; j++)
{
wynik= liczby%j;
if (wynik!=0)
n++;
}
if (n!=liczby-2)
tab[i]=1;
else
tab[i]=0;
n=0;
}
for(int k=0; k<testy; k++)
if (tab[k]==1)
cout<<"NIE"<<endl;
else
cout<<"TAK"<<endl;
return 0;
}
Z góry dziękuję.
ciekawe, bo wg mnie powinien zgłosić nie błędną odpowiedź, ale błąd wykonania (SIGSEGV)
(młodsze wersje C++ to zgłaszają)
zobacz, co oznacza błąd wykonania (SIGSEGV)8, przeczytaj jeszcze raz treść zadania i popatrz na twój program
http://ideone.com/ETnKOJ10 <-- Co zrobiłem nie tak? działa bez żadnego zarzutu u mnie a w SPOJu odrzuca
przecież 1 jest liczbą pierwszą więc nie wiem w czym problem
@dobra poczytałem i jednak nie, przepraszam
Poprawiłem i nadal nie działa: http://ideone.com/rP0fQU13 aż mi wstyd że takie proste zadanie przysparza mi tyle problemów
Jedyne co zrobiłeś to if [przykładowe wejście z zadania] then [wyświetl przykładowe wyjście]. Zacznij testować swoje programy dla jakichkolwiek danych albo nie licz na żadną pomoc. Bez urazy, ale jeżeli:
1) nie zapoznałeś się z definicją liczby pierwszej,
2) jeżeli mnie pamięć nie myli wysłałeś tylko jedno zgłoszenie na SPOJa przed napisaniem na forum (jeżeli pamięć mnie myli to i tak bez znaczenia z powodów 1), 6) i 7), które dostatecznie sugerują, że nawet nie chcesz (samodzielnie) rozwiązać tego zadania),
3) nie przeczytałeś jak zakładać tematy na forum,
4) nie zrobiłeś żadnego researchu, zarówno na forum jak i w innych źródłach,
5) założyłeś nowy wątek w niewłaściwym miejscu i jak pamiętam z nieprawidłową nazwą (jeżeli pamięć mnie myli to i tak bez znaczenia, bo zgrzeszyłeś 3) i 4) i założeniem wątku w niewłaściwym miejscu, co w połączeniu z innymi faktami prowadzi do konkluzji przedstawionej poniżej),
6) po otrzymaniu odpowiedzi nawet nie chciało Ci się od razu wyszukać definicji liczby pierwszej - wolałeś zacząć od: "przecież 1 jest liczbą pierwszą więc nie wiem w czym problem",
7) Po sprawdzeniu czy 1 jest liczbą pierwszą napisałeś: "@dobra poczytałem i jednak nie, przepraszam" i wprowadziłeś kolejnego ifa do kodu - nie przetestowałeś swojego programu dla żadnych innych liczb;
to możliwe są trzy opcje (sprawdź definicję alternatywy): oczekujesz, że ktoś zrobi to zadanie za Ciebie lub jesteś za głupi nawet na (jak słusznie zauważyłeś) "takie proste zadanie". W każdym z trzech przypadków nie warto Ci pomagać.
Jeżeli chcesz zatrzeć falstart to kilka podpowiedzi: co z np. 49? Jest pierwsza czy nie? A co z np. 77, 133, 143, ... 1981? Samodzielnie sprawdź, czy wymienione przeze mnie liczby są pierwsze czy złożone oraz jak w ich przypadku zachowa się Twój program.
EDIT
Wątek był w złym miejscu, ale został tu doklejony.
Zupełnie niesłusznie czepiasz się człowieka
a przecież on tylko pewnie uwierzył w reklamę na pierwszej stronie spoj-a:
Zrobimy z Ciebie programistę! Wystarczy tylko 6 tygodni
(i nie sprawdził, że 6 tygodni nie wystarczy, potrzeba jeszcze od 12 do 14 tysięcy za jeden kurs, oraz nie ma doświadczenia, by wiedzieć, że dla 99% uczestników tego kursu będą to wyjątkowo głupio wydane pieniądze)