Pagini recente » Cod sursa (job #664438) | Cod sursa (job #558897) | Cod sursa (job #269628) | Cod sursa (job #133648) | Cod sursa (job #1693821)
#include <fstream>
#include <iostream>
struct lst
{
int i1;
lst *urm,*prec;
}*dp[1000000],*l;
int i,j,k,n,v[8],m,sign,p,prez[1000000],indv;
long long sol,sol1,cell;
using namespace std;
fstream f,g;
void bkt(int i)
{
if(i<=m)
{
p*=v[i];
sign=!sign;
bkt(i+1);
p/=v[i];
sign=!sign;
bkt(i+1);
}
else sol1+=(-1+2*sign)*(n-n/p);
}
int main()
{
f.open("fractii.in",ios_base::in);
g.open("fractii.out",ios_base::out);
f>>n;
for(i=2;i<=n;i++)
{
dp[i]=new lst;
dp[i]->urm=dp[i];
dp[i]->prec=dp[i];
}
for(i=2;i<n;i++)if(dp[i]->urm==dp[i])for(j=i*2;j<=n;j+=i)
{
l=new lst;
l->i1=i;
l->urm=dp[j];
l->prec=dp[j]->prec;
dp[j]->prec->urm=l;
dp[j]->prec=l;
}
sol=n;
p=1;
sign=0;
for(i=2;i<=n;i++)if(prez[i]==0)
{
if(dp[i]->urm==dp[i])
{
m=1;
v[1]=i;
}
else for(m=0,l=dp[i]->urm;l!=dp[i];l=l->urm,m++)v[m+1]=l->i1;
sol1=0;
bkt(1);
indv=1;
for(l=dp[i]->urm;l!=dp[i];l=l->urm)
{
k=l->i1;
for(j=0,cell=i*k;cell<=n;cell*=k,j++)prez[cell]=1;
indv+=j;
}
sol+=indv*sol1;
}
g<<sol;
}