21 / 277
Aug 2016

Zupełnie nierozumiem twoich pytań, przecież obie wersje twoich programów są [OBYDWIE WERSJE] bardzo dobre i nie rozumiem co ci się tam sypie?
Pierwsza wersja dokładnie typuje liczby pierwsze i nie-pierwsze w zakresie od 0 do 120, a potem już troszeczkę mniej dokładnie - czasami zdarza mu [twojemu programowi]nieznacznie się pomylić.
Co do drugiej wersji, jest dokładnie tak samo [więc co tu się sypie]. Różnica jest tylko taka [malutka], że zakres dokładności skurczył się jakoś magicznie do 2 - 10. Powyżej tego zakresu [tak mi się wydaje, chociaż nie testowałem, a tylko tak sądzę] twój program nie widzi liczb pierwszych.
Czyli można by [w drugim przypadku] napisać w środku pętli po prostu:

if ( a == 2 || a == 3 || a == 5 || a == 7 || a == 0 || a == 1)
        cout << "TAK" << endl;
else  
       cout << "NIE" << endl;

i dostaniemy dokładnie takie same wyniki, jak twoim drugim programem, czyż nie?

PS
Gdybyś choć trochę dokładniej poczytał ten wątek - było już o tym wcześniej pisane. Lub gdybyś trochę rozszerzył zakres testowania ...

include

using namespace std;

int main()
{
long int a , ile;
cin >> ile;
if ( ile < 100000)
{
for ( int i = 1 ; i <=ile ; i++ )
{
cin >> a;
if ( a > 0 && a < 10000)
{
if ( a == 1)
{
cout << "NIE" << endl;
}
else if ( a == 2 || a == 3 || a == 5 || a == 7)
{
cout << "TAK" << endl;
}
else if ( (a%2==0) || (a%3==0) || (a%5==0) || (a%7==0) )
{
cout << "NIE" << endl;
}
else
{
cout << "TAK" << endl;
}
}

    }
}
return 0;

}

nie wiem czemu sędzia mi kodu nie przyjmuje w internecie znalazłem pierwsze liczby do 1000000 i wybierałem losowo i za każdym razem dobrze działa ale nie mam mimo wszystko zaliczonego zadania???

  1. Po kiego dodałeś instrukcje: if ( ile < 100000) and if ( a > 0 && a < 10000) !!!????
  2. Czemu dodałeś je [pkt 1] z błędem ?????!!!!!!
  3. Więc jeżeli tak, to może po prostu je usuń [patrz pkt 1 i 2], bo to może być dodatkowy powód nie zaliczania zadania.
  1. Więc pozwól, że też wybiorę zupełnie losowo : 121
  2. Czy 121 jest liczbą pierwszą???!!!!!!
  3. Jeżeli nie wiesz, to sprawdź w swoim internetowym znalezisku.
  4. A co "mówi" twój wspaniały program!!!?????? :wink:
  5. Jeżeli się myli, już przy tak małej liczbie, to może się myli jeszcze dużo więcej razy przy większych, jak sądzisz?
    ..............
  6. Czy warto pisać to tyle razy, jak i tak tego nie czytasz!!!???? {mam na myśli ten wątek i wcześniejsze posty]. Ile razy można wciąż powtarzać w kółko to samo?

sorry nie zauważyłem tego że liczbę 121 pokazuje mi ze jest to liczba pierwsza chociaż nie jest ale co dziwne jak sprawdzam wielkie liczby to działa dobrze 5303 TAK 5011 TAK 5009 TAK 5483 TAK muszę zobaczyć co jest z tymi liczbami.

Zwyczajnie sprawdzasz za mało pierwszych. Ten kod działa ci dla liczb które mają jakiś dzielnik >2 i <11, niezależnie od ilości cyfr w liczbie (byle się w int zmieściła)

Może mi ktoś sprawdzić mój kod i powiedzieć co jest w nim nie tak? (wyskakuje mi, że błędna odpowiedz)

include

using namespace std;

int main()
{

int n;

cin>>n;
int liczby[n];
for(int i=0; i<n; i++)
{
    cin>>liczby[i];
    if((liczby[i]%2==0)||(liczby[i]==1)) cout<<"NIE"<<endl;
    else cout<<"TAK"<<endl;
}

return 0;

}

Po pierwsze kod dajemy w tagu dostępnym pod ctrl + shift + c.

po drugie dla testu
3
9
25
121

Daje ci 3x TAK a powinien 3x NIE.

Twój program odpowiada na pytanie czy liczba jest nieparzysta i rózna od 1.
Dla zapytania np o liczbę 33 odpowie TAK, to nieparzysta, ale przecież w zadaniu nie o to chodzi.
33 NIE nie jest liczbą pierwszą. Dzieli się i przez 1, 3, 11, 33.

Poczytaj albo ten wątek i wszystkie inne o tym zadaniu tu na forum, albo poszukaj w internecie informacji o liczbach pierwszych i o metodach [algorytmach] sprawdzania czy liczba jest liczbą pierwszą

11 days later

Ma ktoś pomysł co tu jest źle bo ja nie ogarniam gdyż sędzia pokazuje że źle a ja nie widzę błędu :confused:

include

using namespace std;

int n,l;

int liczba_pierwsza(int p)
{
if (p%p==0 && p%1==0 && p!=1 && p%2!=0 && p%3!=0 || p==2 || p==3) cout << "TAK" << endl;
else cout << "NIE" << endl;
}
int main()
{
cin >> n;
for (int i=0; i<n; i++)
{
cin >> l;
liczba_pierwsza(l);
}
return 0;
}

może należało po prostu przeczytać ten wątek ?

może sprawdzić twój program dla kilku, kilkunastu liczb podanych w wątku ?

ty nie musiałbyś wtedy pisać, a ja czytać i odpowiadać na problem, który wystąpił wielokrotnie

Witam. Przetestowałem swoją wersję programu dla wielu liczb z zakresu od 0 do 200 i wyniki pokrywają się z prawdą. Gdzie popełniłem błąd w programie? Z góry dziękuję za odpowiedź

#include <iostream>
using namespace std;
int main()
{
int n,liczba;
cin>>n;
for (int i=0;i<n;i++)
{
cin>>liczba;
int k=2;
do
{
if(liczba==0|liczba==1|(liczba%k==0))
{cout<<"NIE"<<endl;break;}
else if(k==liczba-1){cout<<"TAK"<<endl;}
k++;
}while(k<=liczba-1);
}
return 0;
}

Dla dwójki był błąd. Nie wiem jak mogłem to przeoczyć. Dziękuję i przepraszam za kłopot

9 days later

szkoda, że nie nie przeczytałeś tego wątku przed napisaniem swojego pytania :slight_smile:

77 ?

@esbe

Chciałbym wrócić do początku tego wątku,
Ktoś, z czytających, ma pomysł lub doświadczył działania programu poniżej 0.00 sek?

Dodam iż mi się udało w 0.15 sek.
Ciekawią mnie inne rozwiązania niż sam dokonałem w C++ (5.1).

Rozwiazanie zawarłem w pętli do...while, czyli wykonuj dzielenia badanej liczby przez "j" (gdzie j=2) nastepnie j++, aż do momentu gdy potęga kwadratowa z "j" bedzie wieksza od liczby badanej.
Jezeli wynik dzielenia będzie kiedykolwiek ==0 to "NIE"
Plus dodatkowy warunek dla "2".

poniżej 0.00 się nie da :slight_smile:

ale już poniżej 0.005 tak - prawidłowy algorytm + szybkie wczytywanie

sam prawidłowy algorytm daje czas 0.01 (operacje wejścia/wyjścia scanf()/printf(), a nie cin/cout)

8 days later