Pagini recente » Cod sursa (job #2984983) | Cod sursa (job #1645805) | Cod sursa (job #1672263) | Cod sursa (job #1195866) | Cod sursa (job #427099)
Cod sursa(job #427099)
#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%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 min1(int x,int y)
{
return x<y?x:y;
}
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)
fact[i]=min(fact1[i],fact2[i]);
if(D==4)
fact[i]=fact2[i];
}
for(int i=1;i<=R;i++)
{
if(D==2 || D==3 || D==5)
if(fact[R]-fact[i]-fact[R-i]>0)
nr++;
if(D==4)
if((fact[R]-fact[i]-fact[R-i])/2>0)
nr++;
if(D==6)
if(min1(fact1[R]-fact1[i]-fact1[R-i],fact2[R]-fact2[i]-fact2[R-i])>0)
nr++;
}
printf("%d",nr);
return 0;
}