1006 Fansblog解題報告

2021-09-25 20:52:08 字數 1164 閱讀 6723

1006 fansblog

題意簡述:

給定乙個大素數p,請找出它的前乙個素數q,並求出q! mod p的值,其中1e9 o(n

)o(\sqrt)

o(n​

) 也是解決不了的,因此我們得採用miller-rabin素性測試演算法。該演算法是o(k

log3

q)

o(klog^3q)

o(klog

3q)複雜度,可以滿足要求。但是一定要注意!!!1e14* 1e14 的中間結果溢位了!不僅僅要在miller-rabin演算法中用__int128等方法防止溢位,在qpow(快速冪函式)中也要防止溢位!!!!

求出了q之後就是威爾遜定理的應用。威爾遜定理:(p−

1)!≡

−1(m

odp)

(p-1)! \equiv -1 (mod \: p)

(p−1)!

≡−1(

modp

),於是q=−

1/[(

p−1)

∗(p−

2)..

.∗(q

+1)]

q = -1/[(p-1)* (p-2) ... * (q+1)]

q=−1/[

(p−1

)∗(p

−2).

..∗(

q+1)

]。最後再用逆元化除為乘即可得到答案。

**示例:

#include#includetypedef long long ll;

ll fmul(ll a,ll b,ll p)

ll qpow(ll a,ll b,ll m)

return res;}

bool isprime(ll n)

if(x != 1) return false;

} return true;

//當x=n-1,或b為奇數時返回true;

}void solve(ll q,ll p)

ans = fmul(p-1,qpow(ans,p-2,p),p);

printf("%lld\n",ans);

}int main()

} }}

USACO Hamming Codes 解題報告

資料小,暴力搜尋可以搞定。但是推薦使用dfs,每個節點 數 有取與不取兩個分支。注意 0是必須出現的。證明如下 最終得到的結果序列中,0是必須出現的,證明如下 如果存在另乙個滿足要求的結果序列s 其最小值為a1 n 0,那麼序列s s n 是滿足條件的最小解,且首元素為0 id xpli1 prog...

USACO Closed Fences 解題報告

幾何題看著就很有畏懼感。這裡用的是最 的演算法,時間複雜度應該在n 2。還沒看別人的解題報告,不過我猜nlogn的解法是有的。比如判斷乙個fence是不是valid的時候,這裡將所有的線段兩兩比較,看是否相交。但是有個叫line sweep的演算法,可以在nlogn的時間複雜度內完成。既然accep...

Wiggle Subsequence解題報告

這道題和最長子序列,divisible subset題目類似,都可以用o n2 的時間複雜度完成。可以想象,對於第i個數,dp i dp j 1,當且僅當dp j 1 dp i 而且nums j 和nums i 的差值和j所處位置的差值符號相反。所以,如下 class solution if dp ...