Pagini recente » Cod sursa (job #2306898) | Cod sursa (job #496351) | Cod sursa (job #699520) | Cod sursa (job #602223) | Cod sursa (job #228654)
Cod sursa(job #228654)
#include <stdio.h>
#include <math.h>
#define Size 5000001
int n,d,fact[2],expo[2],nr,expon[Size][1];
void Read()
{
scanf("%d",&n);
scanf("%d",&d);
}
void Decompose()
{
if (d==2||d==3||d==5)
{
nr=1;
fact[1]=d;
expo[1]=1;
}
if (d==4)
{
nr=1;
fact[1]=2;
expo[1]=2;
}
if (d==6)
{
nr=2;
fact[1]=2; fact[2]=3;
expo[1]=1; expo[2]=1;
}
}
int Putere(int x, int y)
{
int put=0;
while (y%x==0)
{
y=y/x;
put++;
}
return put;
}
int Solve()
{
Decompose();
int count=0;
for (int i=1; i<=nr; i++)
for (int aux=1; aux<=n; aux*=fact[i],expon[n][i-1]+=n/aux);
for (int q=n-1; q>=0; q--)
for (int i=1; i<=nr; i++)
expon[q][i-1]=expon[q+1][i-1]-Putere(fact[i],q+1);
for (int i=1; i<=nr; i++)
if (expon[n][i-1]<expo[i])
return 0;
for (int q=0; q<=n; q++)
{
int ok=1;
for (int i=1; i<=nr; i++)
if (expon[n][i-1]<=expon[n-q][i-1]+expon[q][i-1])
ok=0;
if (ok)
count++;
}
return count;
}
int main()
{
freopen("pascal.in","r",stdin);
freopen("pascal.out","w",stdout);
Read();
printf("%d ",Solve());
}