求 \(\sum\limits_^n\sum\limits_^m\frac\) 在 \(k\) 進製下能表示成迴圈節從第一位小數開始的無限迴圈小數或整數的最簡分數個數。
先思考怎麼轉換。
首先肯定滿足 \(\gcd(x,y)=1\)。
假設 \(\frac\) 的迴圈節長度為 \(l\),根據在 \(k\) 進製下的數乘以 \(k^p\) 相當於將小數點往後挪 \(p\) 位,那麼有:
\[\\}=\\}
\]轉換一下上面那個式子,有:
\[\begin
\frac-\lfloor\frac\rfloor&=\frac-\lfloor\frac\rfloor\\
xk^l-\lfloor\frac\rfloor\cdot y&=x-\lfloor\frac\rfloor\cdot y\\
xk^l &\equiv x \pmod y\\
k^l &\equiv 1 \pmod y\\
\gcd(k,y)&=1
\end
\]那麼題意就可以轉換為求:
\[\sum_^\sum_^[\gcd(i,j)=1][\gcd(j,k)=1]
\]先化簡原式,有:
\[\begin
&\sum_^\sum_^[\gcd(i,j)=1][\gcd(j,k)=1]\\
&=\sum_^\sum_^[\gcd(j,k)=1]\sum_\mu(p)\\
&=\sum_^\sum_^[\gcd(j,k)=1]\sum_^\mu(p)[p|i][p|j]\\
&=\sum_^\mu(p)\sum_^\sum_^[p|i][p|j][\gcd(j,k)=1]\\
&=\sum_^\mu(p)\sum_^\sum_^[\gcd(j,k)=1]\\
&=\sum_^\mu(p)\lfloor\frac\rfloor\sum_^[\gcd(j,k)=1]\\
&=\sum_^\mu(p)[\gcd(p,k)=1]\lfloor\frac\rfloor\sum_^\rfloor}[\gcd(j,k)=1]\\
\end
\]再設個函式,並化簡:
\[\begin
f(n)=\sum_^[\gcd(i,k)=1]
\end
\]思考,當 \(i>k\) 時,有 \(\gcd(i,k)=\gcd(i+k,k)\),那麼答案肯定是呈現乙個長度為 \(k\) 的迴圈,那麼有:
\[\begin
f(n)
&=f(n \bmod k)+\lfloor\frac\rfloor\varphi(k)
\end
\]那麼原式等於:
\[\sum_^\lfloor\frac\rfloor f(\lfloor\frac\rfloor)\mu(p)[\gcd(p,k)=1]
\]現在已經有整除分塊了,然後是處理 \(\sum\limits_^\mu(i)[\gcd(i,k)=1]\) 字首和的問題。
法一
設前面那個式子為 \(s(n,k)\)。
嘗試化簡 \(s(n,k)\),則有:
\[\begin
s(n,k)&=\sum_^\mu(i)[\gcd(i,k)=1]\\
&=\sum_^\mu(i)\sum_^\mu(p)[p|i][p|k]\\
&=\sum_^\mu(p)\sum_^\mu(i)\\
&=\sum_^\mu(p)\sum_^\rfloor}\mu(ip)\\
&=\sum_^\mu(p)^2\sum_^\rfloor}\mu(i)[\gcd(i,p)=1]\\
&=\sum_^\mu(p)^2s(\lfloor\frac\rfloor,p)
\end
\]然後數論分塊即可。
法二
這裡是設前面那個式子為 \(s(n)\),則有:
\[\begin
s(n)&=\sum_^\mu(i)[\gcd(i,k)=1]\\
&=\sum_^[\gcd(i,k)=1]s(\lfloor\frac\rfloor)-\sum_^[\gcd(i,k)=1]s(\lfloor\frac\rfloor)
\end
\]先看前面那個:
\[\begin
&\sum_^[\gcd(i,k)=1]s(\lfloor\frac\rfloor)\\&=\sum_^[\gcd(i,k)=1]\sum_^\rfloor}\mu(j)[\gcd(j,k)=1]\\
&=\sum_^\sum_^\rfloor}\mu(j)[\gcd(ij,k)=1]\\
&=\sum_^\sum_[\gcd(t,k)=1]\mu(d)\\
&=\sum_^[\gcd(t,k)=1][t=1]\\
&=1\end
\]那麼最終有:
\[s(n)=1-\sum_^[\gcd(i,k)=1]s(\lfloor\frac\rfloor)
\]數論分塊即可。
#include using namespace std;
const int _ = 1e6 + 5;
inline int read()
while(c >= '0' && c <= '9')
return x * f;
}int n, m, k;
int g[2007], a[_];
int cnt, vis[_], pri[_], mu[_];
mapans_a;
long long ans;
int f(int n)
void init()
for(int j = 1; j <= cnt && i * pri[j] <= _ - 5; ++j)
a[i] = a[i - 1] + mu[i] * (f(i) - f(i - 1)); }}
int f(int x)
return ans_a[x] = ans;
}signed main()
printf("%lld\n", ans);
return 0;
}
bzoj4196軟體包管理器 noi2015
你決定設計你自己的軟體包管理器。不可避免地,你要解決軟體包之間的依賴問題。如果軟體包a依賴軟體包b,那麼安裝軟體包a以前,必須先安裝軟體包b。同時,如果想要解除安裝軟體包b,則必須解除安裝軟體包a。現在你已經獲得了所有的軟體包之間的依賴關係。而且,由於你之前的工作,除0號軟體包以外,在你的管理器當中...
P2254 NOI2005 瑰麗華爾茲
單調佇列優化線性dp 單調佇列中只需儲存下標 只能優化最內層迴圈 dp c 1 x y dp c 1 x que tl dis x,y,x,que tl 時才將隊尾元素出隊 而不僅僅是dp c 1 x y dp c 1 x que tl 即 用隊中所存下標對應狀態對當前狀態的貢獻為依據選擇是否留在隊...
P2048 NOI2010 超級鋼琴
小z是乙個小有名氣的鋼琴家,最近c博士送給了小z一架超級鋼琴,小z希望能夠用這架鋼琴創作出世界上最美妙的 這架超級鋼琴可以彈奏出n個音符,編號為1至n。第i個音符的美妙度為ai,其中ai可正可負。乙個 超級和弦 由若干個編號連續的音符組成,包含的音符個數不少於l且不多於r。我們定義超級和弦的美妙度為...