Pagini recente » Cod sursa (job #418075) | Cod sursa (job #1629947) | Cod sursa (job #1176870) | Rating Tofan Cosmin (TofanCosminAlexandru) | Cod sursa (job #476075)
Cod sursa(job #476075)
#include<cstdio>
int tot,x,y,n,pr[10],sol[10],rez[1<<20],v[1<<20][10];
short int lung[1<<20];
void read()
{
freopen("mins.in","r",stdin);
freopen("mins.out","w",stdout);
scanf("%d%d",&x,&y);
}
void add(int a,int b)
{
int nrt=1,q=0;
for(int i=1;i<=n;i++)
if(sol[i]==1)
nrt*=v[b][i], q++;
if(q%2==0 && q)
tot-=(a/nrt);
else if(q) tot+=(a/nrt);
}
void back(int poz,int a,int b)
{
if(poz>n)
{
add(a,b);
return;
}
sol[poz]=0;
back(poz+1,a,b);
sol[poz]=1;
back(poz+1,a,b);
}
int calc(int a,int b)
{
n=lung[b];
tot=0;
back(1,a,b);
return a-tot;
}
void init()
{
for(int i=1;i<=x;i++)
v[i][0]=1;
}
void solve()
{
init();
rez[1]=y-1;
for(int i=2;i<x;i++)
{
if(v[i][0]==1)
for(int j=i;j<=x;j+=i)
v[j][0]*=i, v[j][++lung[j]]=i;
if(v[i][0]==i)
rez[i]=calc(y-1,i);
else rez[i]=rez[v[i][0]];
}
long long rasp=0;
for(int i=1;i<=x;i++)
rasp+=rez[i];
printf("%lld",rasp);
}
int main()
{
read();
solve();
return 0;
}