階乘 fact 數論

2021-10-09 06:57:13 字數 1539 閱讀 3658

第一行有乙個正整數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是...