题意:输入一个m,将所有的满足条件的数输出。条件为它的阶乘后m均为0.
思路:最后一个为数出现0的数是5的阶乘。因为含有5*2=10.所以有一个零。2每个偶数都可以提供。所以记录5出现几次,就有几个零
#include<cstdio>
#define ll long long
const int maxn = 1e6+10;
int a[maxn];//a[i]代表a[i]的阶乘末尾有几个零
int main()
{
int m;
ll num=0;
for(int i=5;i<=maxn;i++)//每次可以视作在原来的基础上乘个i
{
if(i%5==0)
{
int t=i;
while(t%5==0)
{
t/=5;
num++;
}
}
a[i]=num;
}
scanf("%d",&m);
int f=0;
int i;
for(i=0;i<=maxn;i++)
{
if(a[i]==m)
{
f=1;
break;
}
}
if(f)
{
printf("5\n");
for(int j=0;j<5;j++)
printf("%d ",i+j);//每隔5个数多出个0
printf("\n");
}
else
printf("0\n");
}