Wednesday, May 30, 2018

UVA - 10200 .cpp file

#include <bits/stdc++.h>
using namespace std;
#define N 1000000
bool m [N];
vector <int> primeList;

void sieve ()
{
    memset (m, true, sizeof (m));
    m[0] = m [1] = false;

    for ( int i = 4; i < N; i += 2 )
        m [i] = false;

    for ( int i = 3; i * i <= N; i++ )
    {
        if ( m [i] )
        {
            for ( int j = i * i; j < N; j += 2 * i )
                m[j] = false;
        }
    }

    primeList.clear ();
    primeList.push_back (2);

    for ( int i = 3; i < N; i += 2 )
    {
        if ( m[i] )
            primeList.push_back (i);
    }


}

bool isPrime (int n)
{
    if ( n < N ) return m [n];

    int index = 0;

    while ( primeList [index] * primeList [index] <= n )
    {
        if ( n % primeList [index] == 0 ) return false;
        index++;
    }

    return true;
}

int main ()
{
    sieve ();

    bool save [100000 + 10];
    memset (save, false, sizeof (save));

    for ( int i = 0; i <= 10000; i++ )
    {
        int num = i * i + i + 41;
        if ( isPrime (num) )
            save [i] = true;
    }

    int a, b;

    while (scanf ("%d %d", &a, &b) != EOF )
    {
        int cnt = 0;
        for ( int i = a; i <= b; i++ )
        {
            if ( save [i] ) cnt++;
        }

        printf ("%.2lf\n", (cnt * 100.0) / (double)(b - a + 1) + 1e-9);
    }

    return 0;
}

No comments:

Post a Comment