BZOJ1951 SDOI2010 古代豬文

2022-08-05 00:45:19 字數 2892 閱讀 1986

「在那山的那邊海的那邊有一群小肥豬。他們活潑又聰明,他們調皮又靈敏。他們自由自在生活在那綠色的大草坪,他們善良勇敢相互都關心……」

——選自豬王國民歌

很久很久以前,在山的那邊海的那邊的某片風水寶地曾經存在過乙個豬王國。豬王國地理位置偏僻,實施的是適應當時社會的自給自足的莊園經濟,很少與外界聯絡,商貿活動就更少了。因此也很少有其他動物知道這樣乙個王國。

豬王國雖然不大,但是土地肥沃,屋舍儼然。如果一定要拿什麼與之相比的話,那就只能是東晉陶淵明筆下的大家想象中的桃花源了。豬王勤政愛民,豬民安居樂業,鄰里和睦相處,國家秩序井然,經濟欣欣向榮,社會和諧穩定。和諧的社會帶給豬民們對工作火紅的熱情和對未來的粉色的憧憬。

小豬ipig是豬王國的乙個很普通的公民。小豬今年10歲了,在大肥豬學校上小學三年級。和大多數豬一樣,他不是很聰明,因此經常遇到很多或者稀奇古怪或者旁人看來輕而易舉的事情令他大傷腦筋。小豬後來參加了全豬資訊學奧林匹克競賽(pig olympiad in informatics, poi),取得了不錯的名次,最終保送進入了豬王國大學(pig kingdom university, pku)深造。

現在的小豬已經能用計算機解決簡單的問題了,比如能用p++語言編寫程式計算出a + b的值。這個「成就」已經成為了他津津樂道的話題。當然,不明真相的同學們也開始對他刮目相看啦~

小豬的故事就將從此展開,伴隨大家兩天時間,希望大家能夠喜歡小豬。

豬王國的文明源遠流長,博大精深。

ipig在大肥豬學校圖書館中查閱資料,得知遠古時期豬文文字總個數為n。當然,一種語言如果字數很多,字典也相應會很大。當時的豬王國國王考慮到如果修一本字典,規模有可能遠遠超過康熙字典,花費的豬力、物力將難以估量。故考慮再三沒有進行這一項勞豬傷財之舉。當然,豬王國的文字後來隨著歷史變遷逐漸進行了簡化,去掉了一些不常用的字。

ipig打算研究古時某個朝代的豬文文字。根據相關文獻記載,那個朝代流傳的豬文文字恰好為遠古時期的k分之一,其中k是n的乙個正約數(可以是1和n)。不過具體是哪k分之一,以及k是多少,由於歷史過於久遠,已經無從考證了。

ipig覺得只要符合文獻,每一種能整除n的k都是有可能的。他打算考慮到所有可能的k。顯然當k等於某個定值時,該朝的豬文文字個數為n / k。然而從n個文字中保留下n / k個的情況也是相當多的。ipig預計,如果所有可能的k的所有情況數加起來為p的話,那麼他研究古代文字的代價將會是g的p次方。

現在他想知道豬王國研究古代文字的代價是多少。由於ipig覺得這個數字可能是天文數字,所以你只需要告訴他答案除以999911659的餘數就可以了。

輸入檔案ancient.in有且僅有一行:兩個數n、g,用乙個空格分開。

輸出檔案ancient.out有且僅有一行:乙個數,表示答案除以999911659的餘數。

4 2

10%的資料中,\(1 \leq n \leq 50\);

20%的資料中,\(1 \leq n \leq 1000\);

40%的資料中,\(1 \leq n \leq 100000\);

100%的資料中,\(1 \leq n \leq 10^9\)。

題目要求求出$$g^ c_^}$$

首先,根據尤拉定理,有\(a^ \equiv 1\ (mod\ p)\)

又999911659為質數,故只需求上述質數對\(\)取模的結果

但是999911658不是質數,要怎麼辦呢,crt!!!

\(999911658=2*3*4679*35617\),對這4個質數分別求出\(\sigma_ c_^\)

取模後的值,然後利用crt合併即可。現在的問題只剩下,如何計算\(c_^\) 了,顯然n太大無法遞推,我們考慮利用lucas定理計算即可。

如此下來時間複雜度為\(o(\sqrt n log n)\).

由於之前blog都沒提到crt和lucas 定理,這裡簡單介紹一下好了。

crt說的是這麼一件事:對於給定的同餘方程組\(x\equiv a_i\ (mod\ m_i)\)若\(m_i\)兩兩互素,則該方程存在整數解,且在模\(m=\prod_^ m_i\) 的意義下存在唯一解。

解為\(x \equiv \sigma_^ a_i \frac (\frac)^ \ (\ mod\ m)\)

根據定理去算即可,crt的時間複雜度為\(o(n\log max(m_i))\).

lucas 定理是這樣的:對於乙個質數p,\(c(n,m) \equiv c(n/p,m/p)*c(n\ mod\ p,m\ mod\ p) \ (mod\ p)\)

用於大質數取模,對於\(n,m的情況,利用階乘以及其乘法逆元計算,可以用o(p)的時間先預處理出,時間複雜度為\(o(\log_p n+p)\)

#include #define mn 40000

#define r register

#define ll long long

#define p 999911658

#define file(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout)

#define endfile fclose(stdin),fclose(stdout)

inline int read()

const int pr=;

int inv[mn],fc[mn],g,n;

inline int c(int n,int m,int p)

inline int solve(int p)return res;

}int main()

bzoj 1951 Sdoi2010 古代豬文

求這個東西 g k nk cknm od999911659 這題就是把幾個模板弄在一起。首先尤拉定理 g k nk cknm od 999911659 m od999911659 g k nkck nmod 999911658mo d999911659 然後將999911658拆成2 3 4679 ...

BZOJ 1951 Sdoi2010 古代豬文

題意 給定g,n,求 ans g binom mod p 1 n,g 10 9,p 999911659。演算法 尤拉定理 組合數取模 lucas 中國剩餘定理 crt 題解 先考慮簡化冪運算,因為模數為素數,由尤拉定理可知g k g k p mod p,顯然g k p mod p可以用快速冪求解 但...

bzoj1951 Sdoi2010 古代豬文

time limit 1 sec memory limit 64 mb有且僅有一行 兩個數n g,用乙個空格分開。有且僅有一行 乙個數,表示答案除以999911659的餘數。4 210 的資料中,1 n 50 20 的資料中,1 n 1000 40 的資料中,1 n 100000 100 的資料中,...