Cod sursa(job #2541668)

Utilizator AlexPascu007Pascu Ionut Alexandru AlexPascu007 Data 8 februarie 2020 18:19:03
Problema Fractii Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("fractii.in");
ofstream fout("fractii.out");
int n,i,x,nr,p[100000],f[1000010],cnt,k,j,ans;
vector<int> sol;
int main() {
    fin>>n;
    for (i=2;i<=n;i++) {
        if (f[i]==0)
            p[++k]=i;
        for (j=2*i;j<=n;j+=i)
            f[j]=1;
    }
    for (nr=2;nr<=n;nr++) {
        x=nr;
        sol.clear();
        for (i=1;p[i]<=x/p[i];i++) {
            if (x%p[i]==0) {
                while (x%p[i]==0)
                    x/=p[i];
                sol.push_back(p[i]);
            }
        }
        if (x!=1)
            sol.push_back(x);
        cnt=nr;
        for (auto it:sol) {
            cnt*=(it-1);
            cnt/=it;
        }
        ans+=cnt;
    }
    fout<<1+2*ans;
    return 0;
}