JZOJ5791 階乘 二分 數論,數學

2022-09-03 04:48:09 字數 3098 閱讀 4159

題目:

給出nn

個數a[1]

,a[2

]...

a[n]

a[1]

,a[2

]...

a[n]

,求a[1]

×a[2

]×..

.×a[

n]a[

1]×a

[2]×

...×

a[n]

是m!m!

因數的最小的mm。

首先,我們可以把這n

n個數分解質因數,並將每個質因數存在乙個桶裡。

那麼我們設分解後有k[1

]k[1

]個x[2

]x[2

],k[2

]k[2

]個x[2

]...

k[m]

個x[m

]x[2

]...

k[m]

個x[m

],那麼原本的a[1

]×a[

2]×.

..×a

[n]a

[1]×

a[2]

×...

×a[n

]就變成了:x[

1]k[

1]×x

[2]k

[2]×

...×

x[m]

k[m]

x[1]

k[1]

×x[2

]k[2

]×..

.×x[

m]k[

m]其實也就是說,將m!分解質因數後一定含有k[1]個x[1],k[2]個x[2],一直到k[m]個x[m]

我們知道,如果m!m

!分解質因數後含有x[1

]k[1

]×x[

2]k[

2]×.

..×x

[m]k

[m]x

[1]k

[1]×

x[2]

k[2]

×...

×x[m

]k[m

],那麼(m+

1)!(

m+1)

!就一定含有x[1

]k[1

]×x[

2]k[

2]×.

..×x

[m]k

[m]x

[1]k

[1]×

x[2]

k[2]

×...

×x[m

]k[m

]。原因很簡單。

證:設t=

x[1]

k[1]

×x[2

]k[2

]×..

.×x[

m]k[

m]t=

x[1]

k[1]

×x[2

]k[2

]×..

.×x[

m]k[

m],那麼由於m!m

!分解質因數後含有t

t,那麼m!m

!就可以寫成txt

x,其中x

x為正整數。由於(

m+1)

!=m!

×(m+

1)=t

x(m+

1)(m

+1)!

=m!×

(m+1

)=tx

(m+1

)所以(m+

1)!(

m+1)

!就一定含有x[1

]k[1

]×x[

2]k[

2]×.

..×x

[m]k

[m]x

[1]k

[1]×

x[2]

k[2]

×...

×x[m

]k[m

]證畢。

所以,也就是說,m!m

!裡含有的因式(m+

1)(m

+1)一定含有,那麼(m+

2)(m

+2)也含有,(m+

3)(m

+3)也含有。。。

所以,這個階乘很明顯是單調的。

那麼就可以二分答案q

q。若q!q

!含有k[1

]k[1

]個x[1

]x[1

],k[2

]k[2

]個x[2

]...

k[m]

x[2]

...k

[m]個x

[m]x

[m],那麼q!q

!就是合法的解,由此又可以得到大於q

q的數的階乘也是合法的解。所以最小的答案就在[1,

q][1

,q]中。

否則就在[q+

1,ma

xn][

q+1,

maxn

]中。ma

xnma

xn的話設大一點就好了。反正二分又不會很多次。

時間複雜度:o(n

n+nl

ogn)

o(nn

​+nl

ogn)

#include

#include

#define ll long long

#define n 5000100

using

namespace std;

int n,m,l,r,mid,num[n]

;bool

check

(int x)

if(sum)return

false

;//不夠

}return

true;}

intmain()

if(x>

1) num[x]++;

} l=1;

r=n-1;

while

(l<=r)

printf

("%d\n"

,r+1);

return0;

}

JZOJ5791 階乘 二分 數論,數學

題目 給出nn 個數a 1 a 2 a n a 1 a 2 a n 求a 1 a 2 a n a 1 a 2 a n 是m m 因數的最小的mm。首先,我們可以把這n n個數分解質因數,並將每個質因數存在乙個桶裡。那麼我們設分解後有k 1 k 1 個x 2 x 2 k 2 k 2 個x 2 k m ...

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

二分 假 數論 分數

nput 第一行包含兩個正整數n和p,表示選手的個數以及精度要求。接下來的n行,每行包含乙個0到100 閉區間 內的整數。output 輸出乙個實數,取p位有效數字,下取整。sample input 5 4 100 20 15 10 8 sample output 195.2 data constr...