有n個正整數a[i],設它們乘積為p,你可以給p乘上乙個正整數q,使p*q剛好為正整數m的階乘,求m的最小值。
共兩行。
第一行乙個正整數n。
第二行n個正整數a[i]。
共一行乙個正整數m。16
看到這個題目描述只有一行我心頭就湧上一股不祥的預感……
一般這種題……都比較……那啥……
(是的,這個題我又寫炸了……
好的讓我們來分析一下這道題:
首先我們可以知道,如果乙個數的階乘對輸入的數的乘積取模等於零(實際上就是它的倍數),那麼這個數m!一定是包含了輸入資料相乘的所有質因子的,所以我們在讀入資料的時候先把每個數都分解一下質因子,然後儲存每個質因子出現的次數。
然後我們來感性理解乙個奇怪的結論:
舉乙個例子:30!中有多少個質因子3?
首先我們把含有3的乘數提取出來,大概長這個樣:
3 6 9 12 15 18 21 24 27 30
其中每個數對應含有因子3的個數為: 1 1 2 1 1 2 1 1 3 1
看出什麼規律了嗎? 每兩個一次項過後是乙個二次項,每兩個二次項過後是乙個三次項,後面的規律可以以此類推。
那麼這個結論是不是正確的呢?我們感性理解一下:
每乙個數都除以乙個3,得到的結果是: 1 2 3 4 5 6 7 8 9 10
是不是相當於降下來了一次? 這個時候原先含有乙個3的數已經不含3了,而原先含有兩個3(二次項)的變成了含有乙個3。
較為普適的結論要看這個圖理解(我終於稍微不那麼感性地搞出了這個玩意……):
這個結論有什麼用呢?事實是,用乙個函式模擬上面降次的過程,就可以求出x的階乘中含有的每個質因子的個數。
又顯然,m是具有單調性的,即如果(m_i)!是符合題意的數,那麼(m_j)!(其中j>i)一定也是符合題意的數(因為(m_j)!%(m_i)!==0),所以我們考慮二分乙個m,然後用上面得出的結論來驗證m
然後就出答案啦ovo
#includeusing namespace std;
int prime[100005],n,max_prime=-1,x;
inline long long read()
while(isdigit(c))
return cnt*f;
}bool check(int x)
int l=1,r=1e9;
while(l>1;
if(check(mid))r=mid;
else l=mid+1;
}printf("%d",l);
return 0;
}
Noip模擬賽總結(無題面)T1
首先是第一道貪心題。果然是我貪心做的少了 首先我不該把多重復合的一次函式拆開,我應該把最裡面的解出來,然後迭代解,我拆開後,1是沒有什麼優美的性質,2是變得更複雜 然後t1就是類似國王遊戲這樣的,因為確實可以只考慮前後兩個係數間的關係 而他要求安排順序,又不能 啟發式 安排,只能說確定一種排序規則,...
NOIP2018 模擬賽day1 塔
小 a 想搭乙個體積不超過 m 的塔,他有各種大小的立方積木,比 如邊長為 a 的積木,體積為 a 3,現在小 a 需要你給乙個 x,每次小 a 會用乙個體積不超過 x 的最大積木,依次到搭好為止,現在他想最 大化積木的個數,同時在積木個數最大的情況下使 x 最大。這道題只有那麼神奇了,寶寶看了n久...
NOIP2018模擬賽2018 10 18 輕功
description 題目背景 尊者神高達進入了基三的世界,作為乙個 mmorpg 做任務是必不可少的,然而跑地圖卻令人十分不爽。好在基三可以使用輕功,但是尊者神高達有些手殘,他決定用梅花樁練習輕功。題目描述 一共有 n 個木樁,要求從起點 0 開始,經過所有梅花樁,恰好到達終點 n,尊者神高達一...