#include <iostream>

using namespace std;

// Uwaga: Ten program ma błędy.

/**
   Sprawdza, czy liczba całkowita jest liczbą pierwszą.
   @param n dowolna dodatnia liczba całkowita
   @return wartość true, jeśli liczba n jest pierwsza, w przeciwnym razie false
*/
bool isprime(int n)
{
   if (n == 2)
   {
      // 2 jest liczbą pierwszą
      return true;
   }
   if (n % 2 == 0)
   {
      // Żadna inna liczba parzysta nie jest liczbą pierwszą.
      return false;
   }

   // Spróbuj znaleźć liczbę, przez którą dzieli się n.

   int k = 3; // Nie trzeba dzielić przez 2, ponieważ liczba n jest nieparzysta.
   // Wystarczy sprawdzić dzielniki do wartości sqrt(n).
   while (k * k < n)
   {
      if (n % k == 0)
      {
         // Liczba n nie jest liczbą pierwszą, bo jest podzielna przez k.
         return false;
      }
      // Sprawdź następną liczbę nieparzystą.
      k = k + 2;
   }

   // Nie znaleziono dzielnika, więc n jest liczbą pierwszą.
   return true;
}

int main()
{
   cout << "Proszę wprowadzić górną granicę: ";
   int n;
   cin >> n;
   for (int i = 1; i <= n; i = i + 2)
   {
      if (isprime(i))
      {
         cout << i << endl;
      }
    }
    return 0;
}

