击鼓传花

来源:百度知道 编辑:互助问答吧 时间:2021/01/24 01:29:10
输入
输入文件中有若干行,每一行上是一个正整数n,(n<=200)。输入直到文件结束。
输出
对输入中的每个正整数n,先输出“n!:”,然后输出n!的最后一个非0数字。
输入样例
13
50
输入样例
13!:8
50!:2

#include <stdio.h>
#include <math.h>
int expmod(int a,int k,int mod)
{
int t=1;
while(k)
{
if(k&1) t=t*a%mod;
a=a*a%mod;
k>>=1;
}
return t;
}
int main()
{
int i,j,k,n;
int prime[201],exp[201];
for(i=1;i<=200;++i)
{
for(j=2;j<i;++j)
if(i%j==0) break;
prime[i]=(j==i?1:0);
}
while(scanf("%d",&n)!=EOF)
{
for(i=1;i<=n;++i) exp[i]=0;
for(i=1;i<=n;++i)
if(prime[i]) for(j=i;j<=n;j*=i) exp[i]+=n/j;
exp[2]-=exp[5];exp[5]=0;
for(k=1,i=1;i<=n;++i)
if(prime[i]) k=k*expmod(i,exp[i],10)%10;
printf("%d!:%d\n",n,k);
}
return 0;
}