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