Pagini recente » Cod sursa (job #3259093) | Cod sursa (job #2057742) | Cod sursa (job #3208218) | Cod sursa (job #12207) | Cod sursa (job #228637)
Cod sursa(job #228637)
#include <stdio.h>
#include <math.h>
#define Size 5000000
int n,d,fact[2],expo[2],nr,expon[Size][2];
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 q=0; q<=n; q++)
for (int i=1; i<=nr; i++)
for (int aux=1; aux<=q; aux*=fact[i],expon[q][i-1]+=q/aux);
for (int i=1; i<=nr; i++)
if (expon[n][i-1]<expo[i-1])
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());
}