• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem w serwisie spoj. Błąd logiczny czy nie umiejętne korzystanie z serwisu??

VPS Starter Arubacloud
0 głosów
171 wizyt
pytanie zadane 24 grudnia 2017 w SPOJ przez SQnera Początkujący (280 p.)
zmienione kategorie 24 grudnia 2017

Cześć 

Ostatnio zacząłem bawić się z serwisem spoj. Pisząc kod do zadania z liczbami pierwszymi spotkałem się z problemem. Nie jetem pewien czy jest on spowodowany błędnym myśleniem czy też nie umiejętnie korzystam ze spoja. Jeżeli ktoś zadania z liczbami pierwszymi ma jeszcze przed sobą a nie chce sobie psuć zabawy to niech przestanie dalej czytać :D

Byłbym wdzięczny za pomoc

A oto treść zadania:

Sprawdź, które spośród danych liczb są liczbami pierwszymi

Input

n - liczba testów n<100000, w kolejnych liniach n liczb z przedziału [1..10000]

Output

Dla każdej liczby słowo TAK, jeśli liczba ta jest pierwsza, słowo: NIE, w przeciwnym wypadku.

Mój kod:

#include <iostream>

using namespace std;

void wczytaj(int tab2[]);
void sprawdz(int tab2[]);
int main()
{
    int tab[100000];


    wczytaj(tab);
    sprawdz(tab);


    return 0;
}

void wczytaj(int tab2[])
{
 //W tab2[0] zapisałem długość tablicy
     cin>>tab2[0];

   for(int i=1;i<=tab2[0];i++)
     {
         cin>>tab2[i];
     }
}


void sprawdz(int tab2[])
{
    for(int i=1;i<=tab2[0];i++)
     {

         if(tab2[i]==1){ cout<<"NIE\t";continue;}
         if(tab2[i]==2){ cout<<"TAK\t";continue;}
         if(tab2[i]==5){ cout<<"TAK\t";continue;}
         if(tab2[i]==7){ cout<<"TAK\t";continue;}
         if((tab2[i]%2==0)||(tab2[i]%3==0)||(tab2[i]%4==0)||
            (tab2[i]%5==0)||(tab2[i]%6==0)||(tab2[i]%7==0)||
            (tab2[i]%8==0)||(tab2[i]%9==0)){ cout<<"NIE\t";}
         else
         {
             cout<<"TAK\t";
         }


     }
}



 

2 odpowiedzi

0 głosów
odpowiedź 24 grudnia 2017 przez niezalogowany
wybrane 26 grudnia 2017 przez SQnera
 
Najlepsza
 if((tab2[i]%2==0)||(tab2[i]%3==0)||(tab2[i]%4==0)||
            (tab2[i]%5==0)||(tab2[i]%6==0)||(tab2[i]%7==0)||
            (tab2[i]%8==0)||(tab2[i]%9==0)){ cout<<"NIE\t";}

Musisz sprawdzić wszystkie możliwe dzielniki, a nie tylko do 9. Przykład liczba 121 wg Twojego rozwiązania jest pierwsza,a nie powinna, bo 11*11 = 121. Możesz skorzystać z pewnej matematycznej zależności zakładając, że jakaś zmienna 'i' będzie dzielnikiem, a 'n' sprawdzaną liczbą to musisz sprawdzić wszystkie dzielniki do i*i <= n. W ten sposób nie musisz sprawdzać wszystkich dzielników i < n. Sprawdzając wszystkie dzielniki dla każdej liczby powinieneś zaliczyć zadanie. 

Jak napisał 10kw10 nie potrzebujesz tablicy. Sito Eratostenesa zostaw sobie na później (będzie szybsze, ale więcej wiedzy potrzeba).

komentarz 25 grudnia 2017 przez Aisekai Nałogowiec (42,190 p.)
Ciekawi mnie o co chodzi z tym sprawdzaniem do 9 dzielnikow, bo już to widzę nie pierwszy raz :D
komentarz 25 grudnia 2017 przez niezalogowany
Też mnie to zastanawia :D Czasami sprawdzanych jest mnie np do 7.
0 głosów
odpowiedź 24 grudnia 2017 przez 10kw10 Pasjonat (22,880 p.)
Mozesz od razu po wczytaniu pierwszej liczby sprawdzic czy jest pierwsza i wypisac wynik. Nie jest ci tu potrzebna zadna tablica (oprocz sita Eratostenesa).

Sprawdz liczbe np. 111.

Podobne pytania

0 głosów
2 odpowiedzi 207 wizyt
pytanie zadane 13 maja 2020 w C i C++ przez Stefan Marzec Użytkownik (710 p.)
0 głosów
1 odpowiedź 696 wizyt
–1 głos
1 odpowiedź 100 wizyt
pytanie zadane 22 sierpnia 2016 w C i C++ przez BlackMoon Obywatel (1,730 p.)

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...