Pagini recente » Cod sursa (job #1073362) | Cod sursa (job #1130324) | Cod sursa (job #705496) | Cod sursa (job #53696) | Cod sursa (job #710665)
Cod sursa(job #710665)
#include <cstdio>
#define LE 1050000
#define ll long long
using namespace std;
int A=1,W[LE],n,i,prim[LE],j,k,t,tt[LE];
ll rez;
int pinex(int e)
{
int L=1LL<<e,P=1,T=0,val=1,R=0,y,t,NR=0;
for(y=1; y<L; ++y,val=y,NR=0,P=1)
{
for(t=1; val; val/=2,++t)
if (val%2) P*=W[t],NR++;
if (NR%2) R+=n/P;
else R-=n/P;
}
return n-R;
}
int main()
{
freopen("fractii.in","r",stdin);
freopen("fractii.out","w",stdout);
scanf("%ld",&n);
for(i=2; i*i<=n; ++i) if (tt[i]==0)
for(j=i*i; j<=n; j+=i) tt[j]=1;
for(i=2;i<=n;++i) if (tt[i]==0)
prim[++k]=i;
for(i=1; i<=n; ++i,A=i,t=0)
{
for(j=1; prim[j]*prim[j]<=A&&j<=k; ++j)
if (A%prim[j]==0)
{
W[++t]=prim[j];
while (A%prim[j]==0) A/=prim[j];
}
if (A!=1) W[++t]=A;
rez+=pinex(t);
}
printf("%lld\n",rez);
return 0;
}