Pagini recente » Cod sursa (job #206971) | Cod sursa (job #2454553) | Cod sursa (job #2363789) | Cod sursa (job #948869) | Cod sursa (job #660730)
Cod sursa(job #660730)
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
int prime[78500]; //
int sita[1000001];
int euler(long long n)
{
int dummy = n, p=0,ct;
//cout << dummy << endl;
while (n>1)
{
ct=0;
while (n%prime[p] == 0)
n = n/prime[p],ct++;
if (ct>0)
dummy = dummy/prime[p]*(prime[p]-1);
if (n==1)
return dummy;
if (sita[n]==0)
{
dummy = dummy/n*(n-1);
return dummy;
}
//cout << p << " " << ct << " " << dummy << endl;
p++;
}
//return dummy;
}
int main(void)
{
ifstream fin("fractii.in");
ofstream fout("fractii.out");
int a,x,i=0,n;
long long ct=0;
fin>>n;
for (x=2;x<=n;x++)
if (sita[x] == 0)
{
prime[i++] = x;
a = 2*x;
while (a<=n)
{
sita[a]=1;
a=a+x;
}
}
/*
for (x = 0;x<i;x++)
cout << prime[x]<< " ";
*/
for(x=2;x<=n;x++)
{
ct += euler(x);
// cout << x << " " << euler(x) << endl;
}
ct=2*(ct)+1;
fout<<ct;
return 0;
}