if (liczba%i == 0)
{
cout << "NIE" << endl;
}
else
{
cout << "TAK" << endl;
}
Nie możesz po sprawdzeniu podzielności jednej liczby od razu napisać NIE. Musisz pętlą sprawdzić cały zakres i jeżeli żadne z liczb nie było podzielne dopiero wtedy napisać TAK. Najłatwiej zrobić to za pomocą funkcji, ale w mainie też da się zrobić znając bool i break:
#include <iostream>
using namespace std;
int main()
{
int tests;
cin >> tests;
for (int i = 0; i < tests; i++)
{
int number;
cin >> number;
if (number < 2)
{
cout << "NIE" << endl;
}
else
{
bool isPrime = true;
for (int i = 2; i*i <= number; i++)
{
if (number % i == 0)
{
isPrime = false;
break; // przerwanie petli - po co szukac dalej skoro wiadomo ze nie jest?
}
}
if (isPrime)
std::cout << "TAK" << std::endl;
else
std::cout << "NIE" << std::endl;
// lub std::cout << (isPrime ? "TAK" : "NIE") << "\n";
}
}
return 0;
}
Wersja z funkcją i std::sqrt:
#include <iostream>
#include <cmath>
bool is_prime(int num)
{
if (num < 2)
{
return false;
}
for (int i = 2; i <= std::sqrt(num); i++) // domyslne wyjdzie bez rzutowania na float i zaokraglanie ceil
{
if (num % i == 0)
{
return false;
}
}
return true;
}
int main()
{
int tests;
std::cin >> tests;
for (int i = 0; i < tests; i++)
{
int number;
std::cin >> number;
std::cout << (is_prime(number) ? "TAK" : "NIE") << "\n";
}
}