1. 程式人生 > >【JZOJ5791】階乘【二分】【數論,數學】

【JZOJ5791】階乘【二分】【數論,數學】

題目大意:

題目連結:https://jzoj.net/senior/#main/show/5791
題目圖片:
http://wx2.sinaimg.cn/mw690/0060lm7Tly1fvxbuy446bj30j608kglm.jpg
http://wx3.sinaimg.cn/mw690/0060lm7Tly1fvxbuy44q9j30j40bbt8r.jpg
給出 n n 個數 a

[ 1 ] , a [ 2 ] . . .
a [ n ] a[1],a[2]...a[n] ,求 a [ 1
] × a [ 2 ] × . . . × a [ n ] a[1]\times a[2]\times ...\times a[n]
m ! m! 因數的最小的 m m


思路:

首先,我們可以把這 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]\times a[2]\times...\times a[n] 就變成了:
x [ 1 ] k [ 1 ] × x [ 2 ] k [ 2 ] × . . . × x [ m ] k [ m ] x[1]^{k[1]}\times x[2]^{k[2]}\times...\times 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]}\times x[2]^{k[2]}\times...\times x[m]^{k[m]} ,那麼 ( m + 1 ) (m+1)! 就一定含有 x [ 1 ] k [ 1 ] × x [ 2 ] k [ 2 ] × . . . × x [ m ] k [ m ] x[1]^{k[1]}\times x[2]^{k[2]}\times...\times x[m]^{k[m]}
原因很簡單。

證:
T = x [ 1 ] k [ 1 ] × x [ 2 ] k [ 2 ] × . . . × x [ m ] k [ m ] T=x[1]^{k[1]}\times x[2]^{k[2]}\times...\times x[m]^{k[m]} ,那麼由於 m ! m! 分解質因數後含有 T T ,那麼 m ! m! 就可以寫成 T x Tx ,其中 x x 為正整數。
由於
( m + 1 ) ! = m ! × ( m + 1 ) = T x ( m + 1 ) (m+1)!=m!\times (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]}\times x[2]^{k[2]}\times...\times 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 , M A X N ] [q+1,MAXN] 中。
M A X N MAXN 的話設大一點就好了。反正二分又不會很多次。
時間複雜度: O ( n n + n l o g n ) O(n\sqrt{n}+nlogn)


程式碼:

#include <cstdio>
#include <cmath>
#define ll long long
#define N 5000100
using namespace std;

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

bool check(int x)
{
	int sum;
	ll y;
	for (int i=2;i<=N;i++)
	{
		if (!num[i]
            
           

相關推薦

JZOJ5791二分數論數學

題目大意: 題目連結:https://jzoj.net/senior/#main/show/5791 題目圖片: http://wx2.sinaimg.cn/mw690/0060lm7Tly1fvxbuy446bj30j608kglm.jpg http://wx3.sinaimg.c

USACO1.6.3Prime Palindromes數論數學模擬

題目大意: 題目連結:http://train.usaco.org/usacoprob2?a=iLZIJL4lyhX&S=pprime 求 l

JZOJ4714公約數數論數學

題目大意: 題目連結:https://jzoj.net/senior/#main/show/4714 題目圖片: http://wx4.sinaimg.cn/mw690/0060lm7Tly1fwp1egqfr7j30j70gkglv.jpg 給定一個正整數

JZOJ5182 碼靈鼠數論數學

題目大意: 題目連結:https://jzoj.net/senior/#main/show/5182 題目圖片: http://wx2.sinaimg.cn/mw690/0060lm7Tly1fwlvf1fyufj30j60a8dfz.jpg http://wx3.sinaimg.c

JZOJ5773簡單數學題數論數學

題目大意: 思路: 40分做法: N≤106N\leq 10^6N≤106 直接暴力列舉TTT,輸出符合要求的即可。 100分做法: 首先,我們要求的是N−12TN−T\frac{N-\frac{1

JZOJ5458質數數論數學

題目大意: 求LLL到RRR中是質數或是兩個質數之積的數的個數。 思路: 首先,觀察最大資料: L≤R≤107,Q≤105L\leq R\leq 10^7,Q\leq 10^5L≤R≤107,Q≤1

JZOJ5340春思數論數學

題目大意: 思路: 首先把NNN分解質因數,那麼可以得到 N=d[1]k[1]×d[2]k[2]×...×d[sum]k[sum]N=d[1]^{k[1]}\times d[2]^{k[2]}\ti

JZOJ5182 碼靈鼠數論數學

題目大意: 思路: 題目大意:n+1Problemn+1\ Problemn+1Problem 證明: 首先,我們知道有 an=(1+1)+...+(1+n)+(2+1)+...+(2+n)+..

POJ 2689Prime Distance數論數學

題目大意: 思路: 這道題真的是煩。。。 MLE和RE了超級多次,最後發現是一個極其不起眼的東西。。。 這道題l,r≤231l,r≤231,但是r−l≤106r−l≤106,所以可以考慮從l,rl,r方面入手。 首先我們知道nn的質因子

USACO習題問題

aps 一位 alt splay n) isp amp pan opened 本題在洛谷上的鏈接:https://www.luogu.org/problemnew/show/P1134 剛開始做的時候,是這樣想的,只有n個數的最後一位才會對答案造成影響,所以只管

ACM因式分解(二)

pac col problem 一個 style pro edit spa isp 階乘因式分解(二) 時間限制:3000 ms | 內存限制:65535 KB 難度:3 描述 給定兩個數n,m,其中m是一個素數。 將n(0<=n<=2^31)的階乘

JS後的零 #數學 1到100/1000/10000 的積 末尾有幾個零?

1乘到100的積末尾有幾個零 給定一個整數 n,返回 n! 結果尾數中零的數量。 輸入: 3 , 輸出: 0 , 解釋: 3! = 6, 尾數中沒有零。 輸入: 5 , 輸出: 1 , 解釋: 5! = 120, 尾數中有 1 個零. 說明: 你演算法的時間複雜度應為 O(log

NOIP2018複習數論

1174.階乘 時間限制:1000MS記憶體限制:256000KB 題目描述       有n個正整數a[i],設它們乘積為p,你可以給p乘上一個正整數q,使p*q剛好為正整數m的階乘,求m的最小

C語言訓練和數*

題目連結:http://115.28.203.224/problem.php?cid=1010&pid=35 題目描述 一個正整數如果等於組成它的各位數字的階乘之和,該整數稱為階乘和數。 例如,

題解因子

pan 自然數 題解 std n) div spl opened 過程 題目描述 桐桐剛剛學習了自然數N的階乘:階乘(N!)被定義成從1到N的所有整數的乘積,例如5!=5×4×3×2×1=120。隨著數N的增

的質因數分解)算組合數TOJ4111Binomial efficient

n<=10^6 m<=10^6 p=2^32 用unsigned int 可以避免取模 我寫的SB超時 階乘分解程式碼 #include <cstdio> #include <cstdlib> #include <cmath&

FZU - 1759Super A^B mod C (數論快速冪快速尤拉降冪指數迴圈節模板)

題幹: Given A,B,C, You should quickly calculate the result of A^B mod C. (1<=A,C<=1000000000,1<=B<=10^1000000). Input There are mult

BZOJ1415NOI2005聰聰和可可(動態規劃數學期望)

數學期望 class ios char for problem lin vector noi 【BZOJ1415】【NOI2005】聰聰和可可(動態規劃,數學期望) 題面 BZOJ 題解 先預處理出當可可在某個點,聰聰在某個點時 聰聰會往哪裏走 然後記憶化搜索一下就好了 #

EOJ Monthly 2018.10 - B 莫干山奇遇 (思維構造數學陣列貪心)(總結)

題幹: Time limit per test: 2.0 seconds Memory limit: 512 megabytes 出題人當然是希望出的題目有關 oxx,於是想方設法給題目配上一些有關 oxx 的背景故事,使得它看起來不那麼無趣。但有的時候卻無法引入合適的小姐姐,使得

codeforces1051B——Relatively Prime Pairs思維數學

B. Relatively Prime Pairs time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard outpu