Pagini recente » Cod sursa (job #921432) | Cod sursa (job #2271138) | Cod sursa (job #1576098) | Cod sursa (job #885036) | Cod sursa (job #1691449)
#include <stdio.h>
#include <stdlib.h>
char d2[5000001],d3[5000001],d5[5000001];
int min(int a,int b)
{
if(a<b)
return a;
return b;
}
int main()
{
int n,d,k,z,e,nr,i,nr2,nr3;
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); 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: nr2=0;
for(i=1; i<=(n-1)/2; i++)
nr2+=(d2[i]>0);
nr2*=2;
if((n-1)%2==1)
nr2+=(d2[(n-1)/2+1]>0);
nr3=0;
for(i=1; i<=(n-1)/2; i++)
nr3+=(d3[i]>0);
nr3*=2;
if((n-1)%2==1)
nr3+=(d3[(n-1)/2+1]>0);
printf("%d\n",min(nr2,nr3)); break;
}
return 0;
}