sol君(爐石主播)和sol菌(完美資訊教室講師)是好朋友。
sol君很喜歡階乘。而sol菌很喜歡研究進製。
這一天,sol君跟sol菌炫技,隨口算出了n的階乘。
sol菌表示不服,立刻就要算這個數在k進製表示下末尾0的個數。
但是sol菌太菜了於是請你幫忙。
輸入格式:
本題包含多組資料。
每組輸入僅包含一行:兩個整數n,k。
輸出格式:
對於每組輸入,輸出乙個整數:n!在k進製下字尾0的個數。
輸入樣例#1:
10 40
輸出樣例#1:
2
對於20%的資料,n <= 1000000, k = 10
對於另外20%的資料,n <= 20, k <= 36
對於60%的資料,n <= 10^15,k <= 10^12
對於100%的資料,n <= 10^18,k <= 10^16
鬼題
如果k<=10^12是可以穩過的
k<=10^16就只剩pollard rho(超出提高組模擬範圍了)或玄學優化
首先k進製最後x位為0表示n!能整除k數x次(顯然而重要的條件)
於是問題變為了n!含有多少個k的因子
k為合數不好處理,分解質因數k=p1^a1*p2^a2*p3^a3.....
對於求n!含k的數量,轉變為求p1....的因子數,在除以a1...,取最小值
給出2種方法
1.
n!=(1k*2k*3k*4k*5k...mk)*a
=k^m*m!*a
a為不含k的積,m=n/k
這樣就可以log遞迴求解
2.
含有乙個k:n/k
含有二個k:n/k/k
.....
含有p個k:n/(k^p)
把它們相加
1 #include2 #include3 #include4 #include5 #include6#define count count
7using
namespace
std;
8long
long prime[100001],mi[100001
],tot;
9long
long n,k,cnt,ans=9223372036854775807
,s;10
long
long count(long
long p,long
long k,long
long
mod)
1119
return
ss;20}21
intmain()
22 37 mi[tot]=cnt;38}
39if (k==1) break;40
}41if (k!=1
) 42
46for (i=1;i<=tot;i++)
4751 printf("
%lld\n
",ans);52}
53 }
SAC E 1 一道中檔題 Factorial
sol君 爐石主播 和sol菌 完美資訊教室講師 是好朋友。sol君很喜歡階乘。而sol菌很喜歡研究進製。這一天,sol君跟sol菌炫技,隨口算出了n的階乘。sol菌表示不服,立刻就要算這個數在k進製表示下末尾0的個數。但是sol菌太菜了於是請你幫忙。輸入格式 每組輸入僅包含一行 兩個整數n,k。輸...
SAC E 1 一道難題 Tree
冴月麟和魏瀟承是好朋友。冴月麟為了守護幻想鄉,而製造了幻想鄉的倒影,將真實的幻想鄉封印了。任何人都無法進入真實的幻想鄉了,但是她給前來救她的魏瀟承留了乙個線索。她設定了一棵樹 有根 樹的每一條邊上具有割掉該邊的代價。魏瀟承需要計算出割開這棵樹的最小代價,這就是冴月麟和魏瀟承約定的小秘密。幫幫魏瀟承吧...
SAC E 1 一道難題 Tree(樹形DP)
冴月麟和魏瀟承是好朋友。冴月麟為了守護幻想鄉,而製造了幻想鄉的倒影,將真實的幻想鄉封印了。任何人都無法進入真實的幻想鄉了,但是她給前來救她的魏瀟承留了乙個線索。她設定了一棵樹 有根 樹的每一條邊上具有割掉該邊的代價。魏瀟承需要計算出割開這棵樹的最小代價,這就是冴月麟和魏瀟承約定的小秘密。幫幫魏瀟承吧...