Pagini recente » Cod sursa (job #2481706) | Cod sursa (job #2268130) | Cod sursa (job #218235) | Cod sursa (job #2458061) | Cod sursa (job #1533212)
#include <iostream>
#include <fstream>
#define nmax 1000000
using namespace std;
ifstream fin("fractii.in");
ofstream fout("fractii.out");
int viz[nmax];
long div[nmax],nr;
long ridic(long x,long p)
{
long rez=1;
int i=0;
while((1<<i)<=p)
{
if((1<<i)& p)
rez*=x;
x=x*x;
i++;
}
return rez;
}
int main()
{long p,d,r,n,i,aux;
unsigned long long rez=0;
fin>>n;
for(d=2;d*d<=n;d++)
if(!viz[d])
for(i=2;i*d<=n;i++)
viz[i*d]=1;
for(i=2;i<=n;i++)
if(!viz[i])
div[++nr]=i;
for(i=2;i<=n;i++)
{
p=1;aux=i;d=1;
while(aux!=1 && viz[aux])
{r=0;
while(aux%div[d]==0)
{
r++;aux/=div[d];
}
if(r)p*=(div[d]-1)*ridic(div[d],r-1);
d++;
}
if(aux>1)p*=(aux-1);
rez+=2*p;
}
fout<<rez+1;
}