Pagini recente » Cod sursa (job #2794817) | Cod sursa (job #412019) | Cod sursa (job #849720) | Cod sursa (job #1607442) | Cod sursa (job #850037)
Cod sursa(job #850037)
#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,nr_fractii = 0;
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;
}