Wannafly挑戰賽25 因子 數論

2022-07-30 01:57:16 字數 1078 閱讀 5916

一、題意

令 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 3

using

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 變...