一、題意
令 x = n!, 給定一大於1的正整數p 求乙個k使得 p ^k | x 並且 p ^(k + 1) 不是x的因子
輸入為兩個數n, p (1e18>= n>= 10000 >= p >= 2)
二、分析
2.1前置知識:階乘質因數分解
定理:在n!的標準分解式中,質因數p的指數h為
\[h = \left[ } \right] + \left[ }}} \right] + ... = \sum\limits_^\infty }}} \right]} \]
推論:n!可以由他的質因數表示為
\[n! = \prod\limits_ }}} \right]} }}} \]
2.2本題思路
由題意可得,p的質因數肯定是n!的質因數;所以首先將p做質因數分解,得到p的各個質因數的指數h,再對每乙個p的質因數求其在n!中的指數h
那麼題中所求的k肯定是每一對h/h的數值中的最小值
\[ans = \arg \min \frac}}}}\]
三、**
1 # include 2 # include 3using
namespace
std;
4const
long
long inf = 1e18+10;5
long
long
n,p;
6long
long h(long
longi)7
15return
res;16}
17void
solve()
1830 ans = min(ans,h(i)/h);31}
32}33 printf("
%lld\n
",ans); 34}
35int
main()
3641
return0;
42 }
Wannafly挑戰賽25 A 因子
時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 令 x n 給定一大於1的正整數p 求乙個k使得 p k x 並且 p k 1 不是x的因子。兩個數n,p 1e18 n 10000 p 2 乙個數 表示k示例1 ...
Wannafly挑戰賽25A 質因子分解
階乘因子分解,找出n 中有多少個p ll findnum ll n,ll p return ans include include include include include using namespace std typedef long long ll 篩出p的最小質數和個數,再用快速演算法...
Wannafly挑戰賽25 C 期望運算元
nqijij 有乙個數x,和乙個神秘權值 q,滿足 x q,每一次nqijij會隨機x 變成 x,q 中的乙個隨機數,nqijij想要知道期望多少次操作之後x 變為q。由於nqijij 是乙個精力充沛的人,所以他總共會選擇 t 次x 和q 進行操作,對於每一次操作,你需要輸出期望多少次操作之後x 變...