Cod sursa(job #2294658)

Utilizator MoldooooooooMoldoveanu Stefan Moldoooooooo Data 2 decembrie 2018 17:35:50
Problema Fractii Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <cstdio>
#define MaxN 1000005
using namespace std;
int Er[MaxN], List[MaxN], i, N, P, d, j;
long long int q, Count;
int main()
{
    freopen("fractii.in", "r", stdin);
    freopen("fractii.out", "w", stdout);
    scanf("%d", &N);
    i=2;
    while(i<=N){
    if(Er[i]==0){
        Er[i]=1;
        d=i*2;
        while(d<=N) {Er[d]=1; d+=i;}
        List[++P]=i;
    }
    while(Er[i]==1 && i<=N)++i;}
    for(i=2; i<=N; ++i){
        d=i; q=1;
        for(j=1; d>1; ++j) if(d%List[j]==0){
            d/=List[j];
            while(d%List[j]==0 && d>1){
                q*=List[j];
                d/=List[j];
            }
            q*=(List[j]-1);
        }
        Count+=2*q;
    }
    printf("%lld", Count+1);
    return 0;
}