Pagini recente » Cod sursa (job #3184802) | Cod sursa (job #2916273) | Cod sursa (job #2957665) | Cod sursa (job #2403699) | Cod sursa (job #2770651)
//Ilie Dumitru
#include<cstdio>
typedef long long ll;
int p[3][5000005];
int get(int a, int x)
{
int s=0;
while(!(a%x))
++s, a/=x;
return s;
}
void precomp(int R)
{
int i;
p[0][0]=p[0][1]=p[1][0]=p[1][1]=p[2][0]=p[2][1]=0;
for(i=2;i<=R;++i)
{
p[0][i]=p[0][i-1]+get(i, 2);
p[1][i]=p[1][i-1]+get(i, 3);
p[2][i]=p[2][i-1]+get(i, 5);
}
}
inline int min(int a, int b) {return a+(b-a)*(b<a);}
int main()
{
FILE *f=fopen("pascal.in", "r"), *g=fopen("pascal.out", "w");
int D, R, i, ans=0;
fscanf(f, "%d%d", &R, &D);
precomp(R);
switch(D)
{
case 2:
for(i=1;i<R;++i)
ans+=(bool)(p[0][R]-p[0][i]-p[0][R-i]);
break;
case 3:
for(i=1;i<R;++i)
ans+=(bool)(p[1][R]-p[1][i]-p[1][R-i]);
break;
case 4:
for(i=1;i<R;++i)
ans+=(bool)((p[0][R]-p[0][i]-p[0][R-i])>>1);
break;
case 5:
for(i=1;i<R;++i)
ans+=(bool)(p[2][R]-p[2][i]-p[2][R-i]);
break;
case 6:
for(i=1;i<R;++i)
ans+=(bool)min(p[0][R]-p[0][i]-p[0][R-i], p[1][R]-p[1][i]-p[1][R-i]);
}
fprintf(g, "%d", ans);
fclose(f);
fclose(g);
return 0;
}