小清新數論題泛做


1、bzoj3481 DZY Loves Math III

\(xy \equiv Q \pmod {P}\)的解的組數。以乘積形式輸入\(P,Q\)
題解
一來直接把P拆質因子轉成多個方程最后求乘積。
現在考慮\(xy \equiv Q \pmod {pi^{ai}}\)的解的組數。
\(p=pi^{ai}, Q=pi^{bi}\)
假設枚舉x
則答案為 sigma gcd(x,p) 其中[gcd(x,p) | q]
改成枚舉d=gcd(x,p)
或者說枚舉gcd有幾個pi因子
則答案為 sigma d* (sigma x: [gcd(x,p/d) == 1]) 其中d | gcd(p,Q)
這是因為你x含有的pi因子不能比d多,所以gcd(x,p/d) == 1
這個是歐拉函數
答案為 \(\sum_{d | gcd(p,Q)} d*φ(p/d)\)
枚舉i從0至\(min(a_i,b_i)\),算一下就行,要用公式把\(φ(p^a)\)拆開
\(φ(p^a)=p^a*(p-1)/p (a>0)\)
注意指數為0特判即可
Q等於0也要特判
(注意)一個小trick:\(gcd(i,a)==b \iff gcd(i/a,b/a)==1\)

2、無能為力

pic1
數據范圍\(10^9\)
題解
比較毒瘤
細節超多
(1)發現i=0時原式值為1,所以先不考慮0最后加上
(2)按照套路,大膽猜測斐波那契循環節為\(P-1\)要不然沒法做。。。
(3)拆質因子發現\(P-1=961749330=2 * 3 * 5 * 17 * 29 * 65027\)
(4)發現枚舉\(i\)沒有前途,於是枚舉 \(gcd(i,n)=d\),然后發現$ \dbinom{n}{d} $ 和 \(x^d\) 直接算即可
(5)考慮求滿足\(gcd(i,n)=d\)\(y^i\)之和
\(gcd(i,n)==d \iff gcd(i/d,n/d)==1\)
即求滿足\(gcd(i/d,n/d)==1\)\(y^i\)之和
\(n/d\)的質因子暴力容斥
設枚舉到\(n/d\)的一個因子為\(U\)
則貢獻為$ \sum_{k=1}^{N/U} y^{Uk} $
這個式子的值可以分治+快速冪解決

(6)然后發現\(5\)在模\(961749331\)意義下有二次剩余,求Fib數列直接做就可以了

3、Function


數據范圍\(10^{18}\)
題解
推式子題
上來先打表
扔進OEIS
發現一個很不顯然的規律
$f(n)= \sum_{i^2 | n} {\frac{n}{i^2}} \( 於是我們愉快的枚舉\)i^2$即可
這樣枚舉范圍就變成\(10^9\)
可以推出\(Ans=\sum_{i=1}^{\sqrt{n}} \frac{\left \lfloor \frac{n}{i^2} \right \rfloor * (\left \lfloor \frac{n}{i^2} \right \rfloor + 1)}{2}\)
數論分塊即可。
注意本題卡\(cmath\)\(sqrt()\)精度
傳入參數時轉成\(long double\)可以解決
速度墊底不知道為什么QwQ

4、Function(2)


數據范圍\(10^9\),多測。
題解
推式子題
上來先打表
發現一個不是很顯然的規律
\(d(n)\)表示約數個數函數:
\(\sum_{i|n} {μ(i)d(n/i)^2} = d(n^2)\)
數據范圍\(10^9\)
我會暴力!
分塊打表即可,由於30kb大小限制,塊大小頂多設\(500000\)
交上去發現\(TLE\)
略加優化:塊內的某個位置從兩端逼近,比如\(F(999888)\)\(F(1000000)\)來計算,而\(F(2002333)\)\(F(2000000)\)來計算
常數減小一倍,就通過了。

5、Ceil it!

數據范圍 N<=\(10^{18}\)

題解(純圖片)

6、Road

題意及數據范圍:
\(\sum_{i=1}^N G^i*i^M,N\le 10^9,M\le 50,G\)\(A*A\)的矩陣,\(A\le 50\)

題解:
\(tag\):分治,倍增,二項式定理,矩陣乘法
因為二項式定理同樣適用於矩陣,矩陣的乘法、加法也可以直接運算,因此我們可以把\(G\)直接當常數做。
\(F(n,m)\)表示\(\sum_{i=1}^n G^i*i^m\)
答案為\(F(N,M)\)
直接遞推求\(F(N,M)\)復雜度顯然不可接受。
考慮快速冪形式的倍增:
\(F(2n,m)\)
\(=\sum_{i=1}^{2n} G^i*i^m\)
\(=\sum_{i=1}^n G^i*i^m + G^n\sum_{i=1}^n G^i*(i+n)^m\)
\(=F(n,m)+G^n\sum_{i=1}^n G^i\sum_{j=0}^m \dbinom{m}{j} i^j n^{m-j}\)
\(=F(n,m)+G^n\sum_{j=0}^m \dbinom{m}{j} n^{m-j}\sum_{i=1}^n G^ii^j\)
\(=F(n,m)+G^n\sum_{j=0}^m \dbinom{m}{j} n^{m-j} F(n,j)\)

\(i\)維護\(F(i,0...m)\)
然后做快速冪
復雜度\(O(MA^3logN)\)

7、Fib

求第\(K\)大的滿足條件的自然數\(N\)
(1)N在Fibnacci數列中。
(2)N是完全平方數。
若不存在輸出\(-1\)
\(K\le 10^9\)

題解
只有\(1,1,144\)符合要求。

8、求\(\dbinom{n}{p} \pmod{p}\)

\(p\)是質數,\(3\le p\le n\le 10^{1000}\)

題解
手玩Lucas
答案即\(\left \lfloor \frac{n}{p} \right \rfloor\)
高精度除法膜法

9、最大公約數

\(GCD(\dbinom{2N}{1},\dbinom{2N}{3},...,\dbinom{2N}{2N-1})\),答案對\(1000000007\)取模
\(N\le 10^{100000}\)

題解
\(lowbit(2N)\)

10、簡單數論題

題目描述:
給三個兩兩互質的數 \(a,b,c\),以及另一個數 \(m\), 現在他希望找到三個\((0,m)\)內的整數\(x,y,z\)
使得\(x^a+y^b=z^c \pmod{m}\)\(10^5\)組數據,\(a,b,c,m\le 10^9\)

Sol:
\(2\)的方冪構造答案即可。
具體的,
構造\(p\times a=q\times b=t\)
這樣得到\((2^p)^a+(2^q)^b=2\times 2^t=2^{t+1}\)
只要用\(exgcd\)搞出\(2^{t+1}=(2^k)^c\)的滿足條件的\(k\)\(t\)就構造出一組\((x,y,z)\)了。
然后要注意\(exgcd\)求得的一對\(x,y\)要把調整成正數。

11、(Atcoder) ModularPowerEquation

讓你構造方程\(n^x\equiv x\pmod m\)的一個正整數解。
\(n,m\le 10^9\)
你的答案不超過\(2*10^{18}\)

Sol:
使用歐拉定理,
令$$x\equiv y\pmod {φ(m)},(x,y>0)$$
以及$$x\equiv n^x\equiv n^y\pmod m$$
繼續可推出$$y\equiv n^y\pmod{gcd(m,φ(m))}$$
注意到這與原問題形式一致,故遞歸求解得到一個\(y\)
此時使用\(EXCRT\)算法,求出\(x\)的值,注意時刻保持\(x,y>0\),當求出\(x=0\)時把\(x+=M\)就好
關於EXCRT算法相關的一些問題可以參考這里 https://www.cnblogs.com/bestwyj/p/10409806.html
但是以上過程感覺還是有一些疑點,這里說一下個人理解:
(1)首先我一來就是上的擴展歐拉定理,但是那個\(+φ(p)\)不太能處理。
后來發現由於某些奇怪的原因直接寫成歐拉定理就挺對的。
(2)題目中要求無解打"-1",但根據實測情況並不會出現無解,盡管全程\(Assert(c\%d==0)\),但EXCRT一直工作成功。隨了\(10^4\)左右組數據也沒出現什么問題。

12、中學數論題

設第 \(n\) 個素數是 \(l\),證明對於任意整數 \(0\le k\le n\) 都可以找到一個長度為 \(l\) 的正整數區間 \([i,i+l-1]\) 使得其區間素數個數等於 \(k\)

Sol:離散介值隨便做一做

13、number

\(n(\le 10^{18})\),要你求所有 \(x\) 滿足 \(n|x\)\(n=d(x)\)\(x\) 的和,取模輸出或者報告有無窮個。

Sol:
對於 \(n\ge 6\),可以證明若 \(n\) 有平方因子,則答案為 inf,可以通過在爆搜的過程中構造方案證明。
對於 \(n\ge 6\)\(n\) 無平方因子,根據爆搜的做法,顯然轉化為 \(\omega(n)\) 個點的二分圖匹配計數,可以狀壓DP。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM