Pagini recente » Istoria paginii runda/adjksbv/clasament | Clasamentul arhivei ACM | Cod sursa (job #2085189) | Istoria paginii runda/absenta | Cod sursa (job #2017743)
#include <stdio.h>
int l1[5000001],l2[5000001];
int main()
{
int r,d,ct=0,i,x,nr,z,d2=0;
freopen("pascal.in","r",stdin);
freopen("pascal.out","w",stdout);
scanf("%d%d",&r,&d);
if(d==4) d=2,ct=1;
if(d==6) d=2,d2=3;
x=d;
while(x<=r)
{
for(i=x; i<=r; i+=x)
++l1[i];
x*=d;
}
if(d2==3)
{
x=d2;
while(x<=r)
{
for(i=x; i<=r; i+=x)
++l2[i];
x*=d2;
}
d=6;
}
for(i=1; i<=r; ++i)
l1[i]=l1[i-1]+l1[i];
if(d==6)
for(i=1; i<=r; ++i)
l2[i]=l2[i-1]+l2[i];
nr=0;
z=(r-1)>>1;
for(i=1; i<=z; ++i)
{
x=l1[r]-l1[i]-l1[r-i];
if(ct) x>>=1;
if(d<6 && x) nr+=2;
if(d==6 && x && l2[r]-l2[i]-l2[r-i]) nr+=2;
}
if(!(r&1)){
x=l1[r]-l1[i]-l1[r-i];
if(ct==1) x>>=1;
if(d<6 && x) ++nr;
if(d==6 && x && l2[r]-l2[i]-l2[r-i]) ++nr;
}
printf("%d\n",nr);
return 0;
}