Pagini recente » Cod sursa (job #2388662) | Cod sursa (job #592726) | Cod sursa (job #2145421) | Cod sursa (job #701226) | Cod sursa (job #850022)
Cod sursa(job #850022)
#include<fstream>
#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
vector<bool> ciur;
void make_ciur(long n)
{
long i,j;
ciur.resize(n+1,1);
ciur[0]=ciur[1]=0;
i=2;
while (i<=(long)(sqrt((double)n)))
{if(ciur[i])
{
j= i*i;
while (j<=n)
{
ciur[j]=0;
j+=i;
}
}
++i;
}
}
long totient(long x)
{
if(x <= 1) return 1;
if(ciur[x]) return x-1;
long cx = x ,phi = x,d=3;
if(cx%2 == 0)
{
phi -= phi/2;
while(cx%2 == 0)
{cx/=2;}
}
while (cx>1)
{
if(cx%d == 0)
{
phi -= phi/d;
while(cx%d == 0)
{cx /=d;}
}
d+=2;
while(!ciur[d])
d+=2;
}
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;
}