题目地址:http://ac.jobdu.com/problem.php?cid=1040&pid=54
C语言源码:
#include<stdio.h>
#include<limits.h>
int b[1010],s[1010],top;
void pri()
{
int i,j;
top=0;
i=2;
for(i=2;i<1010;i++)
b[i]=0;
for(i=2;i<1010;i++)
{
if(b[i]==0)
{
s[top++]=i;
for(j=i;j*i<1010;j++)
b[j*i]=1;
}
}
}
int main()
{
int n,a,k,pn[1000],pa[1000],i,j;
while(scanf("%d %d",&n,&a)!=EOF)
{
pri();
for(i=0;i<1000;i++)
{
pn[i]=0;
pa[i]=0;
}
for(i=0;i<top;i++)
{
while(a%s[i]==0)
{
pa[s[i]]++;
a/=s[i];
}
if(a==1)
break;
}
for(j=2;j<=n;j++)
{
k=j;
for(i=0;i<top;i++)
{
while(k%s[i]==0)
{
pn[s[i]]++;
k/=s[i];
}
if(k==1)
break;
}
}
k=INT_MAX;
for(i=0;i<1000;i++)
{
if(pa[i]!=0)
{
if(pn[i]-pa[i]<k)
k=pn[i]/pa[i];
}
}
printf("%d\n",k);
}
}