8 / 18
Aug 2018

Zadanie6

#include <iostream>
#include <math.h>
using namespace std;

void PierwszeOdpalenie(bool pierwsza[])//Nadaje Bool`om true jesli nie sa liczbami pierwszymi
{
    for(int i=1;i<=10000;i++)
    {
    for(int j=1;j<=sqrt(10000);j++)
        {
            if(j>i)
            {
                break;
            }
        if(i<=1)pierwsza[i]=true;
         else if(i%j==0&&j!=1&&j!=i&&i!=2)
        {
        pierwsza[i]=true;
        break;
        }
        }
    }

}
void Sprawdz(bool pierwsza[],int liczba)//Sprawdza i wypisuje czy bool jest liczba pierwsza czy nie
{
  if(pierwsza[liczba]==false)cout<<"TAK"<<endl;
  else cout<<"NIE"<<endl;
}


int main()
{
    bool Pierwsza[10000];
    PierwszeOdpalenie(Pierwsza);
    int proby;
    cin>>proby;
    for(int i=0;i<proby;i++)
    {
    int liczba;
    cin>>liczba;
    Sprawdz(Pierwsza,liczba);
    }
    return 0;
}

Moglbym prosic o jakies rady co jest nie tak? :slight_smile: Spoj wywala Bledna odpowiedz, zgaduje ze nie dalem jakiegos wyjatku.

  • created

    Aug '18
  • last reply

    Dec '18
  • 17

    replies

  • 1.5k

    views

  • 9

    users

  • 3

    likes

  • 5

    links

1.) To tworzy tablicę od 0 - 9999, a nie 10000 więc dla tej liczby jesteś poza tablicą.
2.) Funkcja nadaje boolom true jeśli nie są liczbami pierwszymi, a jeżeli są pierwszymi może być 1 lub 0 bo nie wyzerowałeś tablicy.
Poprawisz te dwie rzeczy i AC.

Zmieniłem i to i to, ale wciąz nie działa;/

#include <iostream>

#include <math.h>
using namespace std;

void PierwszeOdpalenie(bool pierwsza[])//Nadaje Bool`om true jesli nie sa liczbami pierwszymi
{
for(int i=1;i<=10000;i++)
{
for(int j=1;j<=sqrt(10000);j++)
{
if(j>i)
{
break;
}
if(i<=1)pierwsza[i]=true;
else if(i%j==0&&j!=1&&j!=i&&i!=2)
{
pierwsza[i]=true;
break;
}
}
}

}
void Sprawdz(bool pierwsza[],int liczba)//Sprawdza i wypisuje czy bool jeselse t liczba pierwsza czy nie
{
if(liczba==1||liczba==0)cout<<“NIE”<<endl;
else if(pierwsza[liczba]==false)cout<<“TAK”<<endl;
else cout<<“NIE”<<endl;

}

int main()
{
bool Pierwsza[10001];
PierwszeOdpalenie(Pierwsza);
int proby;
cin>>proby;
for(int i=0;i<proby;i++)
{
int liczba;
cin>>liczba;
Sprawdz(Pierwsza,liczba);
}
return 0;
}

Teraz namieszałeś.
Chodziło mi o to że nie wyzerowałeś tablicy liczb pierwszych, dlatego masz błędy. Ja w twoim pierwszym kodzie w jednej linii dopisałem/zmieniłem (3 znaki) i jest AC.

Oki faktycznie “wyzerowałem” boola i wszystko działa, dzieki za pomoc:)

Czesc . Temat prosty w zasadzie Liczby Pierwsze.Mysle usiade napisze na szybko zeby " sie rozkrecic " zatem napisalem wydaje mi sie prosty program a spoj nie chce go przyjac

#include

using namespace std;

int n,x;

int main()
{
cin>>n;

for ( int i=0; i<n; i++)
{
    cin>> x;
    if (x==2  || x==3 || x==5) cout <<" TAK "<<endl;
    else if (x%2!=0 && x%3!=0 && x%5!=0 && x/x==1 && x!=0 && x!=1)cout <<" TAK "<<endl;
    else  cout <<" NIE "<<endl;

}
return 0;

}

Mozliwe ze mam jakies braki ale z tego co pamietam liczby pierwsze to liczby wieksze od zera dajace sie podzielic przez siebie same i przez 1 z wylaczeniem wlasnie 0 i 1.Puscilem program do 90 liczby w code blocks dziala natomiast tu nie .Juz uproscilem go jak tylko moglem bez niczego zbednego bo bylem ciekaw dlaczego zle a tu nadal zle hmm.Wyszedlem z zalozenia ze program prosty wiec rozwiazanie mialo tez byc proste i szybkie.Wiec licze na jakies szybkie konstruktywne slowa krytyki;-)

Proszę :slight_smile:

1.

Całkowicie błędna definicja. Według niej wszystkie liczby (z wyjątkiem 1 i 0) są pierwsze. Np. takie 10. Dzieli się przez 1 i przez samą siebie, prawda? Więc jest pierwsza. Taką definicję podałeś

2.

Skąd przypuszczenie, że spoj sprawdza do 90 tylko? Poza tym nawet do takiej liczby Twój program działa źle. 49 nie jest liczbą pierwszą, a u Ciebie będzie. Co zaś na przykład z 289? Pierwsza czy nie pierwsza? Mieści się w ramach Twojego algorytmu?

3.
Kod przekazuj albo za pomocą linku do https://ideone.com/ (wciskając taki łańcuch przy edycji wiadomości) albo zaznaczasz cały kod (od którego musi być przynajmniej linia odstępu) i klikasz taki przycisk </>. Posty na forum są traktowane jako dokument markdown jakbyś chciał o tym poczytać więcej

4.
Wydaje mi się, że niektóre Twoje warunki typu x/x==1 są tak oczywiste, że nie trzeba ich sprawdzać.

5.
Chyba przejdzie, ale zauważ, że wyświetlasz " TAK ", a powinieneś wyświetlać “TAK”. Podobnie z zaprzeczeniem

starczy chwilowo :slight_smile:

  1. W zasadzie byl to taki skrot myslowy ale ok uwazam na kazde slowo albo lepiej sprecyzuje
    " …liczby większe od 1 majace dokladnie dwa dzielniki naturalne jedynke i sama siebie z wylaczeniem oczywiscie 1 i 0 …" . Sadze ze wiesz o co mi chodzilo no ale przyznaje nie doprecyzowalem wiec miałeś “pole do menewru”.

  2. Masz racje te liczby nie mieszcza sie w tej definicji. Kurde wpadlem na ta liczbe 49 jak wylaczylem kompa i ruszylem w droge do pracy jednak liczylem ze zdaze wejsc na forum pierwszy poprawic moja “wpadke” slight_smile:

  3. Dzieki za info. Poczytam jak wroce

  4. To akt desperacji aby wykluczyc ewentualne niedociągnięcia.

  5. Sadzilem ze estetyczniej skoro blad zmienie

Dzieki za zainteresowanie i uwagi . Wprowadze korekty na przyszlosc w pisaniu na forum. W zasadzie to banalny blad w mysleniu. Dzieki jeszcze raz

Raczej… miałem nadzieję, że użyłeś skrótu myślowego, a nie przyjmujesz takiej definicji, ale dużo rzeczy już na świecie widziałem :wink: Łącznie z tym, że liczby pierwsze to: 1 2 3 4 5 6 7 8 9 10 11 ... - no bo są piewsze (na początku liczb naturalnych) :slight_smile: Ale dobrze, że znasz definicję.

Za to like :wink:

OK. Wezme wszystkie wskazowki pod uwage i poczytam troche wiecej.Dzieki za info , doceniam zainteresowanie
Nawiasem mowiac "uporczywe …<<endl; " wynika z tego ze na jednym z filmow autora N uslyszalem ze w przypadku SPOJA czasami moze wyskoczyc blad/nie przyjac programu z tego wlasnie powodu= brak " …<<endl; ".Zatem ze nie wiem co sedzia jest w stanie zakceptowac wiec nie korzystam tez z opisow /komentarzy.Tak asekuracyjnie.
Temat uwazam za zamkniety .Dzieki

Rzeczywiście, dlatego natychmiast zrezygnuj ze SŁUCHANIA [i oglądania] filmów a zacznij czytać KSIĄŻKI. Ale w sumie, najważniejsze że jesteś asekurantem, braawo Ty.

Też uważam temat za zamknięty.

2 months later

witam,
podpinam się pod ostatni post w tym zadaniu.
poproszę o luknięcie w kod (sprawdzane na dużych liczbach, 1,0… itp.), wciąż odrzuca jako błędna odpowiedź.: https://ideone.com/rZbhlc11

!!! poszło! dzięki!
niebywałe! ;)))) nie zresetowałem w zupełnie innym miejscu… jeszcze raz dzięki!

28 days later

Cześć!

chciałabym poradzić się Was w temacie programu z serii łatwych.
Jest to moje pierwsze zadanie na spoj i niestety spotykam się z rezultatem
błędna odpowiedź. Może ktoś w wolnej chwilii zerknąć na kod i coś zasugerować?

#include
#include
using namespace std;

bool pierwsza(int k)
{
if(k<2)
return false;
for(int i=2; i<k; i++)
if(k%i==0)
return false;

return true;
}

int main() {

int tab[100000];
srand(time(NULL));

for(int n=0; n<100000; n++)
{
tab[n] = rand()% 10000+1;
}
for(int n=0; n<100000; n++)
{
if(pierwsza(tab[n]))
cout<<“TAK\n”;
else
cout<<“NIE\n”;
}

return 0;
}

Z góry, dzięki!

jeżeli pozostaniesz na spoj-u dłużej, to jeszcze nie raz zobaczysz WA :slight_smile:

mogę coś zasugerować - uważnie czytaj treść zadania, a po WA nawet kilka razy :slight_smile: