Cod sursa(job #785570)

Utilizator mipsPavel Mircea mips Data 9 septembrie 2012 13:45:04
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <iostream>
#include <vector>
#include <cstdio>
using namespace std;

int vi[1000001];
int d[1000001];
int powers[1000001];
int main()
{
    freopen("fractii.in","r",stdin);
    freopen("fractii.out","w",stdout);
    int n;
    cin >> n;

    for(long long i=2;i<1000001;i++)
    if (powers[i] == d[i])
    {
        int divisors=0;
        if (d[i]==0)
        {
            d[i]=1;
            powers[i]=1;
        }

        for(int j=i+i;j<1000001;j+=i)
        {
            divisors++;
            powers[j]++;
            if (d[i] % 2 == 1)
            {
                vi[j]+=divisors;
                d[j]++;
            }
            else
            {
                vi[j]-=divisors;
            }


        }

        int power=0;
        if (i<1000)
        for(long long j=i*i;j<1000001;j*=i)
        {
            power++;
            powers[j]+=power;
        }

    }
    int total=0;
    for(int i=2;i<=n;i++)
    {
        total += 2*(i - vi[i] - 1);
    }
    cout << total+1;
}