Pagini recente » Cod sursa (job #2296507) | Cod sursa (job #1685287) | Cod sursa (job #2382012) | Cod sursa (job #1801291) | Cod sursa (job #1533215)
#include <iostream>
#include <fstream>
#define nmax 1000000
using namespace std;
ifstream fin("fractii.in");
ofstream fout("fractii.out");
int viz[nmax];
long divi[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])
divi[++nr]=i;
for(i=2;i<=n;i++)
{
p=1;aux=i;d=1;
while(aux!=1 && viz[aux])
{r=0;
while(aux%divi[d]==0)
{
r++;aux/=divi[d];
}
if(r)p*=(divi[d]-1)*ridic(divi[d],r-1);
d++;
}
if(aux>1)p*=(aux-1);
rez+=2*p;
}
fout<<rez+1;
}