SDOI2010 古代豬文

2021-10-06 03:28:46 字數 2683 閱讀 1272

題目背景

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

——選自豬王國民歌

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

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

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

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

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

題目描述

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

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

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

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

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

輸入格式

一行兩個正整數 n,gn,g。

輸出格式

輸出一行乙個整數表示答案。

輸入輸出樣例

輸入 #1複製

4 2輸出 #1複製

2048

說明/提示

【資料規模】

對於 10%10% 的資料,1\le n \le 501≤n≤50;

對於 20%20% 的資料,1\le n \le 10001≤n≤1000;

對於 40%40% 的資料中,1\le n \le 10^51≤n≤105;

對於 100%100% 的資料中,1\le n,g \le 10^91≤n,g≤109。

發現指數上似乎很大。

檢驗一波模數,發現模數是個質數,根據費馬小定理,可以將指數對 999916159 取模。

現在問題集中於算出指數上的式子。

問題來了: 999911658 不是質數。

將其質因數分解,發現可以分解為四個質數的乘積。

考慮以這四個質數為模數構造同餘方程組,最後的通解即為式子的值。

現在的唯一問題是在 n 很大的情況下計算組合數。

發現模數很小,可以使用 lucas 定理計算組合數。

篩出 nn 的因數,對於每個模數計算組合數,以該數值構造方程組,最後將通解代入指數上跑快速冪即可。

然後發現只有95分

注意到費馬小定理在底數與模數互質時才能使用。

因為模數為質數,當底數與模數不互質時,底數一定為模數的倍數。此時底數的任意正整數次冪在模意義下等於 0。

指數顯然不為 0 ,當 g 為模數的倍數時特判即可。

#include

#define ll long long

using

namespace std;

const

int mod=

999911658

;ll n,g,farc[

50010

],a[5]

,b[5]=

,val;

ll power

(ll a,ll b,ll p)

void

init

(ll p)

ll c

(ll n,ll m,ll p)

ll lucas

(ll n,ll m,ll p)

void

crt(

)int

main()

for(ll k=

1;k<=

4;k++)}

}}crt();

printf

("%lld\n"

,power

(g,val,mod+1)

);return0;

}

SDOI 2010 古代豬文

一句話題意 設 x sum c n d 求 g x pmod 從原題面大段語文中其實不難推出所求。以前一不敢碰.今天做做發現是個水題 顯然問題在指數上,而不是整個式子。暴力檢驗一下,發現模數為質數。根據費馬小定理,a k equiv a pmod 所以所求化為 sum c d pmod woc怕不是...

題解 SDOI2010 古代豬文

原題傳送門 poi和pku是真的流批 這是一篇晚來十年的題解.洛谷 題目太長,這裡直接給出 演算法競賽高階指南 的題面 給定整數 q,n 1 leqslant q,n leqslant 10 9 計算 q c n d mod 而這到題裡,我們用 g 表示 q 首先給出乙個特例 當 g 9999116...

洛谷 SDOI2010 古代豬文

初見安 這裡是傳送門 洛谷p2480 古代豬文 其實這個題咕了好久了才寫 本題有種數論知識點大雜燴的感覺,若有知識點殘缺歡迎來走走 定理傳送門,lucas傳送門 數論題啊 一眼下來連題都讀不懂呢。樣例知道怎麼來的了就很好整了。說白了題意就是求 n的範圍是1e9,所以對於因數d的列舉不會超過把模數降下...