Do rozwiązania wysłałem 2 rozwiązania:
#include <iostream>
bool IsFirst( int n )
{
if( n == 1 ) return false;
for( int i = 2; i * i <= n; ++i )
{
if( n % i == 0 ) return false;
}
return true;
}
int main()
{
int Num, a;
std::cin >> Num;
for( int i = 0; i < Num; ++i )
{
std::cin >> a;
if( IsFirst( a ) )
{
std::cout << "TAK" << std::endl;
} else std::cout << "NIE" << std::endl;
}
return 0;
}
wykonał się 1,77 s.
#include <iostream>
using namespace std;
typedef int liczba;
typedef int kontrolna;
void potwierdzenie (void)
{
cout << "TAK" << endl;
}
void zaprzeczenie (void)
{
cout << "NIE" << endl;
}
int main()
{
liczba sprawdzana;
liczba czyDzielnik;
bool czyJest;
kontrolna iloscTestow;
kontrolna ktoryTest;
cin >> iloscTestow;
for (ktoryTest = 0; ktoryTest < iloscTestow; ktoryTest++)
{
cin >> sprawdzana;
#if 0
Tu sprawdzam czy sprawdzana to liczba pierwsza.
Liczba pierwsza spe³nia warunek taki, ¿e jest podzielna tytlko przez 1 i siebie.
#endif
if ((sprawdzana % 2) == 0)
{
if (sprawdzana != 2)
{
cout << "NIE" << endl;
}
else
{
cout << "TAK" << endl;
}
}
else
{
if (sprawdzana < 9)
{
if (sprawdzana != 1)
{
cout << "TAK" << endl;
}
else
{
cout << "NIE" << endl;
}
}
else
{
// Jeœli zrobimy z sprawdzanej oœ i podzielimy j¹ na 4 i w I niez najdziemy dzielnika
// to dalsze szukanie nie ma sensu.
czyJest = true;
for (czyDzielnik = 3; (czyDzielnik * czyDzielnik) <= sprawdzana; czyDzielnik += 2) //Do sqr można wystartowac
{
if ((sprawdzana % czyDzielnik) == 0)
{
cout << "NIE" << endl;
czyJest = false;
break;
}
}
if (czyJest == true)
{
cout << "TAK" << endl;
}
}
}
}
return 0;
}
osiągnął 1,82
Program drugi powinien przy sprawdzaniu pomijać wiele przypadków, które musi sprawdzić program pierwszy, a wychodzi, że jest wolniejszy. Wiecie o co chodzi?