AOJ 0150 Twin Prime

方針

素数判定してから愚直に求める.

コード

int main()
{
    fill(is_prime, is_prime + 10001, true);

    is_prime[0] = is_prime[1] = false;

    for(int i = 2; i < 10001; i++)
        if(is_prime[i])
            for(int j = i * 2; j < 10001; j += i)
                is_prime[j] = false;

    int n;

    while(cin >> n, n)
        for(int i = n; i >= 0; i--)
            if(is_prime[i] && is_prime[i - 2])
            {
                cout << i - 2 << ' ' << i << endl;
                break;
            }
}