题目链接
思路:根据唯一分解定理可知,一个数可以分解成有限个质数的乘积N=P1^a1 * P2^a2 * P3^a3… Pn^an,这里P1<P2<P3…<Pn均为质数,其中指数ai是正整数。这个题要求的第一个非零整数就是从最低位开始到第一个非零整数之间的零去掉再取余10.
N = 2^α * 5^β * P(P是剩余质数的乘积);
k=min(α,β);
N的第一个非零数就是 N/((2*5)^k) %10 = (2 ^ α-k * 5 ^ β-k * P)%10;
那么这个题就是求出n!中2和5的个数.
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int main() {
int d2=0,d5=0,n;
int ans=1;
cin>>n;
for(int i=1; i<=n; i++) {
int x = i;
while(x%2==0) x/=2,d2++;
while(x%5==0) x/=5,d5++;
ans = ans*x%10;
}
int k = min(d2,d5);
for(int i=1; i<=d2-k; i++) ans = ans*2%10;
for(int i=1; i<=d5-k; i++) ans = ans*5%10;
cout<<ans<<endl;
return 0;
}