Pagini recente » Cod sursa (job #1062011) | Cod sursa (job #903214) | Cod sursa (job #2218772) | Cod sursa (job #2510534) | Cod sursa (job #1691459)
#include <stdio.h>
#include <stdlib.h>
char d2[5000001],d3[5000001],d5[5000001];
int main()
{
int n,d,k,z,e,nr,i;
freopen("pascal.in","r",stdin);
freopen("pascal.out","w",stdout);
scanf("%d%d",&n,&d);
for(k=1; k<=(n-1)/2+1; k++)
{
z=n-k+1;
e=0;
while(z%2==0)
{
e++;
z/=2;
}
d2[k]=d2[k-1]+e;
e=0;
z=k;
while(z%2==0)
{
e++;
z/=2;
}
d2[k]-=e;
}
for(k=1; k<=(n-1)/2+1; k++)
{
z=n-k+1;
e=0;
while(z%3==0)
{
e++;
z/=3;
}
d3[k]=d3[k-1]+e;
e=0;
z=k;
while(z%3==0)
{
e++;
z/=3;
}
d3[k]-=e;
}
for(k=1; k<=(n-1)/2+1; k++)
{
z=n-k+1;
e=0;
while(z%5==0)
{
e++;
z/=5;
}
d5[k]=d5[k-1]+e;
e=0;
z=k;
while(z%5==0)
{
e++;
z/=5;
}
d5[k]-=e;
}
switch(d)
{
case 1 : printf("%d\n",n+1); break;
case 2 : nr=0;
for(i=1; i<=(n-1)/2; i++)
nr+=(d2[i]>0);
nr*=2;
if((n-1)%2==1)
nr+=(d2[(n-1)/2+1]>0);
printf("%d\n",nr); break;
case 3 : nr=0;
for(i=1; i<=(n-1)/2; i++)
nr+=(d3[i]>0);
nr*=2;
if((n-1)%2==1)
nr+=(d3[(n-1)/2+1]>0);
printf("%d\n",nr); break;
case 4 : nr=0;
for(i=1; i<=(n-1)/2; i++)
nr+=(d2[i]>1);
nr*=2;
if((n-1)%2==1)
nr+=(d2[(n-1)/2+1]>1);
printf("%d\n",nr); break;
case 5: nr=0;
for(i=1; i<=(n-1)/2; i++)
nr+=(d5[i]>0);
nr*=2;
if((n-1)%2==1)
nr+=(d5[(n-1)/2+1]>0);
printf("%d\n",nr); break;
case 6: nr=0;
for(i=1; i<=(n-1)/2; i++)
nr+=(d2[i]>0 && d3[i]>0);
nr*=2;
if((n-1)%2==1)
nr+=(d2[(n-1)/2+1]>0 && d3[(n-1)/2+1]>0);
printf("%d\n",nr); break;
}
return 0;
}