Cod sursa(job #456927)

Utilizator SpiderManSimoiu Robert SpiderMan Data 17 mai 2010 12:44:17
Problema Mins Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <cstdio>
#include <algorithm>
using namespace std;

typedef long long ll;
const int MAX = 1000015;
const char FIN[] = "mins.in";
const char FOU[] = "mins.out";

int V[MAX] , P[MAX];
int C, D;
ll s;

void solve(int K, int prod, int N, int val)
{
    if (K > N || (ll) C < (ll) prod * P[K])
    {
        if ( val & 1 )
            s -= (ll) (D / prod) * (C / prod);
        else
            s += (ll) (D / prod) * (C / prod);
        return;
    }
    solve (K + 1, prod * P[K], N, val + 1);
    solve (K + 1, prod, N, val);
}

int main()
{
    freopen(FIN, "r", stdin);
    freopen(FOU, "w", stdout);

    scanf("%d %d", &C, &D);

    if ( C > D ) swap( C , D );

    P[++P[0]] = 2;

    for (int i = 3; i <= D; i += 2)
    {
        if (V[i >> 4] & (1 << ((i >> 1) & 7))) continue;

        P[++P[0]] = i;

        for (int j = i + (i << 1); j <= D; j += i << 1)
            V[j >> 4] |= 1 << ((j >> 1) & 7);
    }

    --C,--D;
    solve (1 , 1 , P[0] , 0);

    printf("%lld" , s);

    return 0;
}