Witam,
Jest to mój pierwszy post na tym forum więc chciałbym się przywitać :) To po pierwsze :)
Po drugie po wielu latach powracam do korzeni (pascal :D) z czystej chęci przypomnienia sobie o co w tym wszystkim chodziło bez napinania się i bez stresu. Kilka dni temu zarejestrowałem się na spoju ponieważ doszedłem do wniosku że przez rozwiązywanie zadań (prostych) najlepiej przypomnę sobie o co chodzi. No i padło na pierwsze zadanie: liczby pierwsze. Od razu mówię iż przeczytałem regulamin tego forum oraz zapoznałem się z tematami dotyczącymi tego zadania oraz jego rozwiązaniami (dział gotowce itp., np. wątki o rozwiązaniu tego zadania). Generalnie przewija się tam opcja sita ale ponieważ jestem osobą upartą a bardzo ciekawym pomysłem wg. mnie na rozwiązanie tego zadania jest opcja sprawdzenia czy dana liczba dzieli się przez: 2,3,5,7 poszedłem w tą stronę, niestety ciągle otrzymuję złą odpowiedź. Jeśli chodzi o testy z mojej strony to liczby pierwsze do 10 000 wyznacza dobrze (sprawdzone na ideone.com z liczbami pierwszymi od 3 do 10 000 - fakt faktem iż powyżej 10 000 podaje błędną odpowiedź ale zadanie mówi o przedziale do 10 000 choć swoją drogą to ciekawe dlaczego program wysypuje się powyżej tej liczby). Pozwolę sobie zamieścić poniżej kod i jeśli ktoś dla zabicia czasu chciałby go prześledzić i nakierować mnie na błędy w tym kodzie to będę bardzo wdzięczny :) Nie jest to co prawda sprawa honoru ale ciekawi mnie czego jeszcze nie wiem :)
program liczby_pierwsze;
{$APPTYPE CONSOLE}
var
licznik,i,j,k,l,x,liczba,lt,ls : longint;
begin
Readln(lt); //czyla liczbe testow
for licznik :=1 to lt do
begin
ls:=0;
Readln(liczba); //czyta liczbe
i:=liczba mod 2; //dzieli liczbe i zapisuje reszte z dzielenia
j:=liczba mod 3; //------||------
k:=liczba mod 5; //------||------
l:=liczba mod 7; //------||------
x:= i*j*k*l; //jesli jedna ze zmiennych i,j,k,l ma wartosc 0 wtedy wiem ze x=0 wiec liczba nie moze byc pierwsza
if liczba = 0 then begin writeln('NIE');ls:=1; end; //na sztywno przypisane wartosci
if liczba = 1 then begin writeln('NIE');ls:=1; end;
if liczba = 2 then begin writeln('TAK');ls:=1; end;
if liczba = 3 then begin writeln('TAK');ls:=1; end;
if liczba = 5 then begin writeln('TAK');ls:=1; end;
if liczba = 7 then begin writeln('TAK');ls:=1; end;
//zmienna ls sluzy do pomijania wykonywania kolejnego ifa lub jesli ls=0 whtdy sprawdzamy czy x <>0 (jest liczba pierwsza)
if ls = 0 then
begin
if x=0 then writeln('NIE')
else writeln('TAK');
end;
end;
end.
Z góry dziękuję za wszelkie rady, sugestie i pomoc :)
dodanie znacznika <code class="delphi"> - furious programming