SPOJ- liczby pierwsze

0

Witam, robiłem zadanie na platformie SPOJ, wyniki wychodzą mi poprawnie ale strona uznaje kod za błędny, jakby ktoś mógł zerknąć na kodzik to byłbym bardzo wdzięczny.

https://ideone.com/BPF48P

#include <iostream>
#include <math.h>

using namespace std;

int main()
{
    int n;
    cin >> n;
    int z;
    string y;
    if (n < 0 || n > 100000)
        return 0;

    for (int i = 0; i < n; i++) {
        cin >> z;
        if (z < 1 || z > 100000)
            return 0;
        if (z == 1) {
            y = "NIE";
        }
        if (z == 2) {
            y = "TAK";
        }

        for (int i = 2; i < z; i++) {
            if (z % i == 0) {
                y = "NIE";

                break;
            }
        }

        cout << y << endl;
    }
    return 0;
}

Link do zadania:
https://pl.spoj.com/problems/PRIME_T/

4

Oto Twój program uruchomiony na danych wejściowych widocznych w poleceniu: https://ideone.com/nSWR7X :-)

1

Moglbys nadawac zmiennym jakies znaczace nazwy? Ciezko sie to czyta.

2

Test zaczął się od 11, żadna z mozliwości nie zaszła, (do y nie zostało coś przypisane) i program wydrukował pusty string. Ta kombinacja z tym igrekiem budzi moje wątpliwośći, zamknij lepiej test w funkcji zwracającej boola i drukuj "TAK" jak true i "NIE", gdy false.
Pomijając, że program jest mega nieoptymalny, ale w C++, to pewnie przejdzie :)
https://en.wikipedia.org/wiki/Primality_test#Simple_methods

0

https://ideone.com/ABIjF1

A więc lekko go zmodyfikowałem i już działa w tamtych przypadkach, na SPOJ-u nawet przechodzi do etapu uruchamiania sędziego(wcześniej od razu mi błąd wyskakiwał) ale niestety dalej podaje błędny wynik.

Dziękuję za wszelką pomoc !!!
edit :jednak znowu sie jakiś błąd wkradł

https://ideone.com/hPyxVh
ten już działa, ale nie według kompilatora.

edit 2: działa!!! kodzik zaakceptowany przez SPOJ
https://ideone.com/wFDkBr

3

Znów sie bawisz z jakąś zmienną, która wprowadza buga, umiesz napisać funkjcę w C++?
Coś takiego:

    #include <iostream>
    #include <math.h>
     
    using namespace std;
     bool isPrime(int n) {
       // TODO
     }
    int main()
    {
       int n;
       cin>>n;
       int z;
      
      for(int i=0;i<n;i++)
       {
         cin>>z;
         if (isPrime(z))
            {
              cout << "TAK\n";
            }
          else
          {
            cout << "NIE\n";
          }
       }
           
        return 0;
    }
0
lion137 napisał(a):

Znów sie bawisz z jakąś zmienną, która wprowadza buga, umiesz napisać funkjcę w C++?

Coś takiego:

    #include <iostream>
    #include <math.h>
     
    using namespace std;
     bool isPrime(int n) {
       // TODO
     }
    int main()
    {
       int n;
       cin>>n;
       int z;
      
      for(int i=0;i<n;i++)
       {
         cin>>z;
         if (isPrime(z))
            {
              cout << "TAK\n";
            }
          else
          {
            cout << "NIE\n";
          }
       }
           
        return 0;
    }
lion137 napisał(a):

Znów sie bawisz z jakąś zmienną, która wprowadza buga, umiesz napisać funkjcę w C++?

Coś takiego:

    #include <iostream>
    #include <math.h>
     
    using namespace std;
     bool isPrime(int n) {
       // TODO
     }
    int main()
    {
       int n;
       cin>>n;
       int z;
      
      for(int i=0;i<n;i++)
       {
         cin>>z;
         if (isPrime(z))
            {
              cout << "TAK\n";
            }
          else
          {
            cout << "NIE\n";
          }
       }
           
        return 0;
    }

Dzięki, postaram się skorzystać z funkcji przy kolejnych zadaniach aby nie robić takiego bałaganu w kodzie

3

Polecam poczytać o sicie Eratostenesa.
Jak ktoś ma więcej wiedzy z C++, to można je obliczyć w czasie kompilacji i zadanie rozwiązać na zasadzie "look up table".
Sprawdziłem da się to zrobić na SPOJ i uzyskuje czas 0.01. W sumie zastanawiam się jak inni uzyskali lepszy czas skoro rozwiązanie z constexpr nie ma przestrzeni na usprawnienia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1