題意:輸入l,r,如果n的階乘結果末尾有i個0,問l<=n<=r時,共用多少個不同的i。
每個0都可以拆分成一個5*2,每兩個數字就有一個是2的倍數,每5個數字纔有一個是5的倍數,所以有多少個0都是由有多少個因子5決定的,每五個數一個,那麼從1到n就有n/5個不同的i。如果遇到25,125這樣n的多少次方,i會跳過一些值,但是不同i的個數仍然是增加1。所以這個題就非常簡單了……
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
typedef long long ll;
ll deal(ll n) {
return n / 5;
}
int main() {
ll l, r;
while(~scanf("%lld%lld", &l, &r)&& (l ||r)) {
printf("%lld\n", deal(r) - deal(l) + 1);
}
return 0;
}