1 / 1
Dec 2011

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?