第一行有乙個正整數t,表示測試資料的組數。
接下來的t行,每行輸入兩個十進位制整數n和base。
>output
對於每組資料,輸出乙個十進位制整數,表示在base進製下,n!結尾的零的個數。
>sample input
210 10
10 2
>sample output28
對於20%的資料,n<=20,base<=16
對於50%的資料,n<=10 ^ 9,base<=10^5
對於100%的資料,1<=t<=50,0<=n<=10^ 18,2<=base<=10^12
>解題思路
一開始只想到暴力所以就打了乙個暴力拿到了20分,看看資料範圍肯定不是暴力啦
正解↓↓↓
在base進製下,n!結尾的零的個數,推算一下可以發現,求得是n!=
base
ans−
1∗kn!=base^*k
n!=bas
eans
−1∗k
,k是0以外的其它數
現在我們來化簡n!n!
n!和b as
ebase
base
這兩個big的數,我們可以對base進行分解質因數,例如:10=2
∗510=2*5
10=2∗5
,然後我們求1~n中有多少個2,多少個5,然後取min值就行了
>**
#include
#include
#include
#include
#define int long long
#define n
1000005
using namespace std;
int t
, n, base, t, p[n]
, c[n]
, ans;
void
work()
}}//很神奇的求法
if(base >
1) p[
++t]
= base, c[t]=1
; ans =
9223372036854775807
;for
(int i =
1; i <= t; i++
) ans =
min(ans, s / c[i]);
//取min值
}printf
("%lld\n"
, ans);}
signed main()
JZOJ 5791 階乘 數論
description 有n個正整數a i 設它們乘積為p,你可以給p乘上乙個正整數q,使p q剛好為正整數m的階乘,求m的最小值。input 共兩行。第一行乙個正整數n。第二行n個正整數a i output 共一行乙個正整數m。題目要求乙個最小的m mm使m!m!m!包含p pp這個因子。可以把p...
編輯函式求n階乘fact 第六周函式作業
1 以下python語句的輸出結果是 24 d lambda p p 2 t lambda p p 3 x 2 x d x x t x x d x print x 2 下列python語句的程式執行結果是 function def f1 function pass print f1.doc 3 下列...
1057 N的階乘 數論
1057 n的階乘 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 輸入n求n的階乘的準確值。input 輸入n 1 n 10000 output 輸出n的階乘input示例 5output示例 120 模擬平時int型別對10取餘進製,輸出還需要注意格式,013lld是...