演算法競賽 高階指南 BZ0J1053 反素數

2021-10-02 22:20:27 字數 855 閱讀 1269

這是個思維想結論題。

根據題目給的條件  推出一些性質,使得問題簡化。

1首先根據反素數定義,我們可以得到,反素數一定是1-n中約數最多的數(如果由多個約數相同且最多的數,取最小的那個)。

證明:假設這個數是m。

我們任取x任取x>=m ,都有g(m)>=g(x)

顯然 x>=m時只有x==m符合反素數定義。則x一定是1-n中最大的反素數。

2.現在問題轉化為求:1-n中約數最多的數(如果由多個約數相同且最多的數,取最小的那個)。

而素數個數等於:所有質數的指數+1後 相乘得到的積。

顯然 盡量讓質數越小越好,我們經過演算  2-29這10個質數想成恰好不大於2e9。

所以最終的反素數的質因子一定是這10個數最優。

假設這10個質因子的指數分別為:c1,c2,c3……c10

顯然有c1>=c2>=c3>=c4……>=c10

如果ci<=cj  且 i>=j   .  我們完全可以swap(ci,cj),然後這個數會變小(因為乘上了乙個小數,除了大數)約數個數不變。更優

有了上面推論 這題就隨便dfs搞搞就行

#includeusing namespace std;

#define pb push_back

typedef long long ll;

const int m =1e6;

int p[20]=;

vectorv;

ll n;

ll ma=0,ans;

void dfs(int id,int lst,ll sm,ll nm)

return ;

}int main()

演算法競賽高階指南 0x00

快速冪模板,寫一下快速冪的原理。我們知道,乙個數 n 在二進位制 也可以是其他進製 下可以被表示為 a 1 a 2 2 1 a 3 2 2 a m 2 那麼我們可以考慮將其分拆成二進位制狀態下的每一位,然後做冪運算。這樣做的時間複雜度為 o log 2 n 實現的過程類似於倒過來的分治 當然也可以直...

《演算法競賽高階指南》0x32約數

求解 1,n 之間的最大的反素數,有性質 這個反素數是質因數個數最多的數中最小的乙個。證明 假設有乙個數質因數個數比它多,如果在他前面,不滿足反素數的定義,如果在他後面,一定可以找到第乙個質因數比它大的數,這個數作為結果更好,反證可知,這個數質因數一定是最多的 反證 假設有質因數與他的個數一樣但是比...

《演算法競賽高階指南》 防曬

有c頭奶牛進行日光浴,第i頭奶牛需要minspf i 到maxspf i 單位強度之間的陽光。每頭奶牛在日光浴前必須塗防曬霜,防曬霜有l種,塗上第i種之後,身體接收到的陽光強度就會穩定為spf i 第i種防曬霜有cover i 瓶。求最多可以滿足多少頭奶牛進行日光浴。輸入格式 第一行輸入整數c和l。...