NOIP2018校模擬賽 T1 階乘

2021-09-25 21:54:14 字數 1369 閱讀 9457

有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,尊者神高達一...