Cod sursa(job #971069)

Utilizator cosmo0093Raduta Cosmin cosmo0093 Data 8 iulie 2013 14:39:07
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <cstdio>
#include <vector>
#include <map>
#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;
    bool *myB = new bool[nV + 1];
    for(int i = 0; i <= nV; i++)
    	myB[i] = true;
    for(int i(2); i <= sqrt(nV); i++)
        if(myB[i])
            for(int j(i * i); j <= nV; j += i)
                myB[j] = false;
    for(int i(2); i <= nV; i++)
        if(myB[i])
        {
            nS++;
            myV.push_back(i);
        }
    for(int i = 0; i <= nV; i++)
    	myB[i] = true;
    std::map<int, std::vector<int> > myM;
    for(int i(0); i < nS; i++)
    {
    	int j = myV[i];
        while(j < nV + 1)
        {
            if(myB[j]) 
			{
				myM[myV[i]].push_back(j);
				myB[j] = false;
			}
            j += myV[i] ;
        }
    }
    nC = (nV - 1) * 2 + 1;
    for(int i(0); i < nS; i++)
    	for(unsigned k(0); k < myM[myV[i]].size(); k++)
    		for(int j(i + 1); j < nS; j++)
    			if(myM[myV[i]][k] % myV[j] != 0) nC += myM[myV[j]].size() * 2;
    printf("%d ", nC);
    return 0;
}