Pagini recente » Cod sursa (job #1909901) | Cod sursa (job #715109) | Cod sursa (job #1332537) | Cod sursa (job #2339157) | Cod sursa (job #228623)
Cod sursa(job #228623)
#include <stdio.h>
#include <math.h>
int n,d,fact[30],expo[30],nr,expon[30],exponmj[30],expoj[30];
void Read()
{
scanf("%d",&n);
scanf("%d",&d);
}
int Prim()
{
for (int i=2; i<=sqrt(d); i++)
if (d%i==0)
return 1;
return 0;
}
void Decompose()
{
int k=2,val=sqrt(d); nr=1;
if (!Prim())
{
fact[1]=d;
expo[1]=1;
}
else
while (k<=val)
{
if (d%k==0)
{
fact[nr]=k;
while (d%k==0)
{
d=d/k;
expo[nr]++;
}
nr++;
}
k++;
nr--;
}
}
int Solve()
{
Decompose();
int count=0;
for (int i=1; i<=nr; i++)
for (int aux=1; aux<=n; aux*=fact[i],expon[i]+=n/aux);
for (int i=1; i<=nr; i++)
if (expon[i]<expo[i])
return 0;
for (int q=0; q<=n; q++)
{
for (int i=1; i<=nr; i++)
{
exponmj[i]=0;
expoj[i]=0;
}
for (int i=1; i<=nr; i++)
{
for (int aux=1; aux<=n-q; aux*=fact[i],exponmj[i]+=(n-q)/aux);
for (int aux=1; aux<=q; aux*=fact[i],expoj[i]+=q/aux);
}
int ok=1;
for (int i=1; i<=nr; i++)
if (expon[i]<=exponmj[i]+expoj[i])
ok=0;
if (ok)
count++;
}
return count;
}
int main()
{
freopen("pascal.in","r",stdin);
freopen("pascal.out","w",stdout);
Read();
printf("%d ",Solve());
}