Pagini recente » Cod sursa (job #996259) | Cod sursa (job #1233442) | Cod sursa (job #561355) | Cod sursa (job #2620057) | Cod sursa (job #935497)
Cod sursa(job #935497)
#include<stdio.h>
int p[10];
int dp[1000005];
inline int sqr(int x)
{
int ans=0;
for(int pas=1<<13;pas;pas>>=1)
if((ans+pas)*(ans+pas)<=x)
ans+=pas;
return ans;
}
long long pinex(int x,int y)
{
///numarul de numere <=x si prime cu y:
int ans=x,q,nr,f=0;
while(y>1)
{
if(f==0 || p[f-1]!=dp[y])
p[f++]=dp[y];
y=y/dp[y];
}
for(int i=1;i<(1<<f);i++)
{
nr=0;q=1;
for(int j=0;j<f;j++)
if(i&(1<<j))
nr++,q*=p[j];
if(nr&1) ans-=x/q;
else ans+=x/q;
}
return ans;
}
int main()
{
freopen("mins.in","r",stdin);
freopen("mins.out","w",stdout);
int n,m;long long ans=0;
scanf("%d%d",&m,&n);
for(int i=3;i<n;i+=2)
dp[i]=i;
for(int i=2;i<n;i+=2)
dp[i]=2;
for(int i=3;i<n;i+=2)
if(dp[i]==i)
for(int j=i+i+i;j<n;j=j+i+i)
dp[j]=i;
for(int i=1;i<n;i++)
ans+=pinex(m-1,i);
printf("%lld\n",ans);
return 0;
}