Pagini recente » Cod sursa (job #839377) | Cod sursa (job #625271) | Cod sursa (job #2930527) | Cod sursa (job #270565) | Cod sursa (job #427088)
Cod sursa(job #427088)
#include<cstdio>
int R,D,nr,fact[1<<23],fact1[1<<23],fact2[1<<23];
void nrf(int f,int x)
{
fact1[x]=fact1[x-1];
fact2[x]=fact2[x-1];
int xo=x;;
if(f==2 || f==3 || f==5)
{
while(x%f==0)
x/=f , ++fact1[xo];
}
if(f==6)
{
while(x%2==0)
x/=2 , ++fact1[xo];
while(x%3==0)
x/=3 , ++fact2[xo];
}
if(f==4)
{
while(x%4==0)
x/=4, ++fact1[xo];
while(x%2==0)
x/=2 , ++fact2[xo];
}
}
int min(int x,int y)
{
if(x<y && x) return x;
if(x<y && !x) return y;
if(x>y && y) return y;
if(x>y && !y) return x;
return x;
}
int main()
{
freopen("pascal.in","r",stdin);
freopen("pascal.out","w",stdout);
scanf("%d%d",&R,&D);
for(int i=1;i<=R;i++)
nrf(D,i);
for(int i=1;i<=R;i++)
{
if(D==2 || D==3 || D==5 || D==6)
fact[i]=min(fact1[i],fact2[i]);
if(D==4)
fact[i]=fact1[i]+fact2[i]/2;
}
for(int i=1;i<=R;i++)
if(fact[R]-fact[i]-fact[R-i]>0)
nr++;
printf("%d",nr);
return 0;
}