Cod sursa(job #1926872)

Utilizator AlexandruRudiAlexandru Rudi AlexandruRudi Data 14 martie 2017 19:06:32
Problema Fractii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <bits/stdc++.h>
using namespace std;
#define x first
#define y second
#define dbg(x) cout << #x << '=' << x << '\n';
#define ll long long
#define pi pair<int,int>
#define pl pair<long long,long long>
#define rd(x) cin >> x;
#define rda(a,n) for(int i=1;i<=n;i++) cin >> a[i];
#define wr(x) cout << x << ' ';
#define wrl(x) cout << x << '\n';
#define wra(a,n) for(int i=1;i<=n;i++) cout << a[i] << ' '; cout << '\n';
#define lg length()
#define pb(x) push_back(x)
ifstream in("file.in");
ofstream out("file.out");
#define MAXN 100005
#define INF 1000000005
#define LINF 1000000000000000005
struct comp{
    bool operator()(int a, int b){
        return a>b;
    }
};

int n,a[1000005],t,x,y;
long long cnt;

int fi(int n){
    int ans=n;
    while(n!=1){
        ans/=a[n];
        ans*=(a[n]-1);
        int p=a[n];
        while(a[n]==p) n/=a[n];
    }
    return ans;
}

int main(){
    ifstream in("fractii.in");
    ofstream out("fractii.out");
    in >> n;
    for(int i=2;i<=n;i++){
        if(!a[i]){
            for(int j=i;j<=n;j+=i) a[j]=i;
        }
    }
    for(int i=2;i<=n;i++){
        cnt+=fi(i);
    }
    out << 2*cnt+1;
}