Cod sursa(job #971053)

Utilizator cosmo0093Raduta Cosmin cosmo0093 Data 8 iulie 2013 14:09:57
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <cstdio>
#include <vector>
#include <cmath>

int main(void)
{
    freopen("fractii.in", "r", stdin);
    freopen("fractii.out", "w", stdout);
    int nV = 0, nS = 0, nC = 0;
    scanf("%d", &nV);
    std::vector<int> myV;
    std::vector<bool> myB;
    myB.resize(nV + 1, true);
    for(int i(2); i <= sqrt(nV); i++)
        if(myB[i])
            for(int j(i * i); j <= nV; j += i)
                myB[j] = false;
    myB.clear();
    for(int i(2); i <= nV; i++)
        if(myB[i])
        {
            nS++;
            myV.push_back(i);
        }
    std::vector<bool> hash;
    hash.resize((nV + 1) * (nV + 1), false);
    
    for(int i(0); i < nS; i++)
    {
        int j = myV[i];
        while(j < nV + 1)
        {
            hash[myV[i] * (nV + 1) + j] = true;
            j += myV[i] ;
        }
    }
    nC = (nV - 1) * 2 + 1;
    for(int i(0); i < nS; i++)
    	for(int j(0); j <= nV; j++)
    		if(hash[myV[i] * (nV + 1) + j])
    			for(int k(i + 1); k < nS; k++)
    				hash[myV[k] * (nV + 1) + j] = false;
    for(int i(0); i < nS; i++)
    	for(int j(0); j <= nV; j ++)
    		if(hash[myV[i] * (nV + 1) + j])
    			for(int k(i + 1); k < nS; k++)
    				for(int l(0); l <= nV; l++)
    					if(hash[myV[k] * (nV + 1) + l] && j % myV[k] != 0) nC += 2;
    printf("%d ", nC);
    return 0;
}