Pagini recente » Cod sursa (job #2850884) | Cod sursa (job #2346204) | Cod sursa (job #445653) | Cod sursa (job #98500) | Cod sursa (job #287306)
Cod sursa(job #287306)
#include <fstream>
#include <math.h>
using namespace std;
ifstream f ("fractii.in");
ofstream g ("fractii.out");
char V[1000000];
unsigned long long int rez = 1;
long n;
void gen_prim()
{
for(int i=3;i<=1000000;i+=2)
if(V[i]==0)
for(int j=i*3;j<=1000000;j+=2*i) V[j] = 1;
}
unsigned long long int totient(long nr)
{
long start=2, k=0;
unsigned long long int NF = 0;
if(nr==1) return 1;
if(nr%2 && V[nr] == 0) return nr-1;
while (nr%start) start++;
while (nr%start == 0) { nr/=start;k++; }
NF+=(long)(int)pow((double)start,(double)k-1)*(start-1)* totient(nr);
return NF;
}
int main()
{
f>>n;
gen_prim();
for(long i=2;i<=n;i++)
{
rez+=totient(i)*2;
}
g<<rez<<"\n";
f.close();
g.close();
return 0;
}