青島之行前的準備(數論為主)

2022-05-08 01:39:08 字數 1683 閱讀 4851

這個題,題意給出是乙個k重迴圈,每個迴圈i重1到n,迴圈體為 res = ( res + a[i1] + a[i2] + ... + a[ik] ) % mod;最後res的值。

解法:對於每個a[i]都是一樣的,

所以我們算出來總的a[i]出現的次數/n就可以知道每乙個出現的次數

總的次數是(nk)*k,所以每個出現(n(k-1))k

所以答案是sum(n^(k-1))*k%mod,最後用快速冪求解。

解法:給你乙個數n  求滿足lcm(a, b) == n, a <= b 的 (a,b) 的個數

容易知道 n 是a, b的所有素因子取在a, b中較大指數的積

先將n分解為素數指數積的形式

n=p1e1*p2e2...pk^ek;

a=p1a1*p2a2…pk^ak

b=p1b1*p2b2…pk^bk

對於a,b它們的最小公倍數為n,則a1<=e1,b1<=e1那麼對於每個素因子pi的個數ei在a,b中的指數ai, bi 至少有乙個等於ei, 另乙個小於等於ei

先不考慮a, b的大小  對於每個素因子pi:

在a中的指數 ai == ei   那麼 pi 在 b 中的指數可取 [0, ei] 中的所有數  有 ei + 1 種情況

在a中的指數 ai < ei  即 ai 在 [0, ei) 中   那麼 pi 在 b 中的指數只能取 ei  有 ei 種情況

那麼對與每個素因子都有 2ei + 1種情況  也就是滿足條件的 (a, b) 有 π(2ei + 1)個  考慮大小時 除了 (n, n) 所有的情況都出現了兩次  那麼滿足a<=b的有 (π(2*ei + 1)) / 2 + 1  個。

解法:把每一列的棋子間隔(可以走的)看成nim博弈中的石子數量,那麼答案就所有差的異或...http://

解法:題意 : 給你 1 2 3 個數,讓你模擬棧的操作

1)將乙個元素push到棧裡;

2)將乙個棧的棧頂元素輸出;

3) 將兩個棧合併;

模擬棧,如果用棧來操作,因為棧數目過多,爆記憶體

如果用vector也會爆

list容器就是乙個雙向鍊錶,可以高效地進行插入刪除元素,合併鍊錶

輸入輸出用scanf printf

另外注意清空操作

for (int i = 1; i <= n; i++)//清空操作很必要

list[i].clear();//n個鍊錶

模擬三個操作

解法:對於這個題,題目思路弄了大半天(那真是大半天),不是說題目意思,而是最後的逆元的步驟,最後發現分子乘以分母對mod的逆元最後取模就ac了。。。

快速冪板子

ll quick_pow(ll a, ll b, int mod)//二進位制寫法

return r;

}

組合數板子
ll c(ll n, ll m)
逆元直接用費馬小定律,inv=quick_pow(a,mod-2,mod);

青島之行前的準備(數論為主)

這個題,題意給出是乙個k重迴圈,每個迴圈i重1到n,迴圈體為 res res a i1 a i2 a ik mod 最後res的值。解法 對於每個a i 都是一樣的,所以我們算出來總的a i 出現的次數 n就可以知道每乙個出現的次數 總的次數是 n k k,所以每個出現 n k 1 k 所以答案是s...

準備重啟 CSDN 部落格為我的次要部落格。

之前,想要把 163 部落格作為我的次要部落格的,但是它已經倒閉了,而且那裡也的確不是專業的技術社群。現在準備把 csdn 作為乙個次要部落格。所謂次要部落格,就是因為我對自己的主部落格的自我要求很高,沒有我個人研究性的,我一般不會發表到自己的 cnblogs 部落格。所以長期以來其實是 qzone...

為PHP面試而準備的演算法題總結

1 插入排序 一維陣列 基本思想 每次將乙個待排序的資料元素,插入到前面已經排好序的數列中的適當位置,使數列依然有序 直到待排序資料元素全部插入完為止。示例 初始關鍵字 49 38 65 97 76 13 27 49 j 2 38 38 49 65 97 76 13 27 49 j 3 65 38 ...