Pagini recente » Cod sursa (job #2336577) | Cod sursa (job #1585283) | Cod sursa (job #976583) | Cod sursa (job #885527) | Cod sursa (job #709803)
Cod sursa(job #709803)
#include <cstdio>
#define LE 1050000
#define ll long long
using namespace std;
int A=1,W[LE],n,i,prim[LE],j,k,t;
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<=n; ++i) if (prim[i]==0)
{
for(j=i+i; j<=n; j+=i) prim[j]=1;
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;
}