Cod sursa(job #850062)

Utilizator unincepatorDigi Cazan unincepator Data 7 ianuarie 2013 23:11:05
Problema Fractii Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include<fstream>
#include<iostream>
#include<vector>
#include<cmath>
using namespace std;vector<bool> ciur;vector<long> primes;void make_ciur(long n){long i,j,q;ciur.resize(n+1,1);ciur[0]=ciur[1]=0;i=2;while (i<=(long)(sqrt((double)n))){if(ciur[i]){primes.push_back(i);j= i*i;while (j<=n){ciur[j]=0;j+=i;}}++i;}for(q=i;q<=n;q++)if(ciur[q])primes.push_back(q);}long totient(long x){if(x <= 1)  return 1;if(ciur[x]) return x-1;long cx = x ,phi = x,d,ind;ind = 0;while (cx!=1){d = primes[ind];if(cx%d == 0){phi -= phi/d;while(cx%d == 0){cx /=d;}}ind++;}return phi;}int main(){long n;unsigned long long nr_fractii = 0LL;ifstream fin("fractii.in");fin>>n;fin.close();make_ciur(n);ofstream fout("fractii.out");for(long i = 1;i<=n;++i)nr_fractii += totient(i);fout<<nr_fractii*2-1;fout.close();return 0;}