Cod sursa(job #1338934)

Utilizator andrei.arnautuAndi Arnautu andrei.arnautu Data 10 februarie 2015 15:50:25
Problema Mins Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <cstdio>
#include <algorithm>
#define MAX 1000000
using namespace std;
FILE *fin=freopen("mins.in","r",stdin);
FILE *fout=freopen("mins.out","w",stdout);

int c, d;
long long int DIV[MAX + 10];
bool PERM[MAX + 10];

long long int cnt;

int main()
{
    long long int i, j;
    scanf("%d %d", &d, &c); --c, --d;

    cnt = 1LL * c * d;

    for(i = 2; i <= MAX; ++i)
    {
        if( DIV[i] )
            continue;

        DIV[i] = 1;

        for(j = i * 2; j <= MAX; j += i)
            ++DIV[j];
        for(j = i * i; j <= MAX; j += i * i)
            PERM[j] = 1;
    }

    for(i = 2; i <= MAX; ++i)
        if( !PERM[i] )
            cnt -= (DIV[i] % 2 == 0 ? -1 : 1) * (c / i) * (d / i);

    printf("%lld ", cnt);

}