Pagini recente » Profil UPB_Andritoiu_Nitu | Monitorul de evaluare | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #136987)
Cod sursa(job #136987)
#include <stdio.h>
long phic[1024];
long cmmdc(long a,long b)
{
if(b==0)return a;
return cmmdc(b,a%b);
}
long phi_nocache(long n)
{
long phi=1,p;
for (p=2;p*p<=n;p += 2)
{
if(n%p==0)
{
phi*=p-1;
n/=p;
while(n%p==0)
{
phi*=p;
n/=p;
}
}
if (p==2)
p--;
}
return (n == 1) ? phi : phi * (n - 1);
}
void init_phic()
{
int i;
for(i=2;i<=1000;i++)phic[i]=phi_nocache(i);
}
long phi(long n)
{
if(n<=1000)return phic[i];
long phi=1,p,i;
for (i=2;(i<=1000)&&(i*i<=n);i++)
if(n%i==0)
if(cmmdc(n,i)==1){phi*=phic[i];n/=i;}
for (p=2;p*p<=n;p += 2)
{
if(n%p==0)
{
phi*=p-1;
n/=p;
while(n%p==0)
{
phi*=p;
n/=p;
}
}
if (p==2)
p--;
}
return (n == 1) ? phi : phi * (n - 1);
}
int main()
{
long i=0;
long nn=0;
long long s=0;
FILE *f;
init_phic();
f=fopen("fractii.in","r");
fscanf(f,"%d",&nn);
fclose(f);
nn++;
for(i=2;i<nn;i++)
s+=phi(i);
s*=2;
s++;
FILE *g;
g=fopen("fractii.out","w");
fprintf(g,"%lld\n",s);
fclose(g);
return 0;
}