洛谷 SDOI2010 古代豬文

2021-09-29 09:04:23 字數 1866 閱讀 2426

初見安~這裡是傳送門:洛谷p2480 古代豬文【其實這個題咕了好久了才寫……

【本題有種數論知識點大雜燴的感覺,若有知識點殘缺歡迎來走走:定理傳送門,lucas傳送門】

數論題啊……一眼下來連題都讀不懂呢。樣例知道怎麼來的了就很好整了。

說白了題意就是求

n的範圍是1e9,所以對於因數d的列舉不會超過把模數降下來

可以想到尤拉定理——a和n互質。//這裡擱淺一下,文末繼續

因為999911659是質數,所以

所以問題就可以轉化為求:

對於把模數降下來,我們引入乙個定理::

對於兩個整數x,y,如果同餘乙個數p,那麼同樣同餘這個數的所有因數

例如證明顯然【嚴謹公式證明有點兒困難,就口胡了……】:

所以我們設

所以可以轉化到:

也就是說我們最後要求的ans就是上面這個方程式的最小正整數解了。對於

到這裡其實這個題就差不多了。但是最後的最後你可能只有95分,wa 第13個點。為什麼??!

我們回到前面擱淺的那個問題上來吧。因為尤拉定理的互質條件,所以我們可以特判一下:如果不互質,直接輸出0,或者寫乙個擴充套件尤拉定理——求當a和n不互質並且的時候,有

因為在尤拉定理下,有三種情況:

也就是說,除了第三種情況,我們都可以直接用直接套這個公式是可行的呢!!!【當然一般情況下最好不要這麼冒險】

最後的最後【其實您已經可以不用看了】,本狸因為tcl所以在求組合數這個問題上糾結了很久……因為我lucas的那篇文章的求法並不適用了,但是用預處理fac和fac的inv的方法也不行,inv從後往前推過來全是0【quq我也不知道為什麼】,所以只能用費馬小,mod-2次方來求逆元……

說了這麼多,也可以上**了——

#include#include#include#include#include#include#define maxn 40005

using namespace std;

typedef long long ll;

ll read()

while(isdigit(ch)) x = (x << 1) + (x << 3) + ch - '0', ch = getchar();

return x * f;

}ll mod[5] = , a[5];

ll fac[maxn];

ll pw(ll a, ll b, ll p) return res;}

ll c(ll n, ll m, ll p)

ll lucas(ll n, ll m, ll p)

ll ans = 0;

void crt()

signed main() //這裡是直接特判的版本

for(int t = 1; t <= 4; t++)

} crt();

// printf("%lld\n", pw(g, ans + mod[0] - 1, mod[0])); 這就是直接套用尤拉公式的版本

printf("%lld\n", pw(g, ans, mod[0]));

return 0;

}

真的寫了好久……哎。

迎評:)

——end——

SDOI2010 古代豬文

題目背景 在那山的那邊海的那邊有一群小肥豬。他們活潑又聰明,他們調皮又靈敏。他們自由自在生活在那綠色的大草坪,他們善良勇敢相互都關心 選自豬王國民歌 很久很久以前,在山的那邊海的那邊的某片風水寶地曾經存在過乙個豬王國。豬王國地理位置偏僻,實施的是適應當時社會的自給自足的莊園經濟,很少與外界聯絡,商貿...

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...