题目:
思路:枚举10000素数内,各因子出现的次数,然后取模为10。因为0是由2和5构成的,所以2和5的幂单独讨论,同时由于2的幂肯定大于5的,所以我们最后要算的再乘上2的减去后的幂就可以得到。
#include#include #include #include #include using namespace std;const int maxn=10001;int n_prime=0;int prime[maxn];int vis[maxn];void Prime(){ memset(vis,1,sizeof(vis)); vis[0]=vis[1]=0; for(int i=2;i =tmp) { ans+=n/tmp; tmp*=p; } return ans;}long long Pow(long long a,long long b){ long long ans=1; while(b) { if(b&1) { b--; ans=(ans*a)%10; } else { b/=2; a=(a*a)%10; } } return ans;}int main(){ Prime(); int n; while(scanf("%d",&n)!=EOF) { long long ans=1; for(int i=1;i<=n_prime;i++) { if(prime[i]==5||prime[i]==2) continue; ans=(ans*Pow(prime[i],get(n,prime[i])))%10; } ans=(ans*Pow(2,get(n,2)-get(n,5)))%10; printf("%5d -> %lld\n",n,ans); } return 0;}