給出乙個數字n
第一行為乙個正整數t,表示資料組數。
接下來t行為詢問,每行包含乙個正整數n。
t<=5000,n<=10^7
按讀入順序輸出答案。110
莫比烏斯反演。
還有一種用尤拉函式的神仙做法
\[\begin
&\sum_^\sum_^n\phi((i,j))\\
&=\sum_^\phi(d)\sum_^\sum_^n[(i,j)=d]\\
&=\sum_^\phi(d)\sum_^\rfloor}\sum_^\rfloor}\sum_\mu(k)\\
&=\sum_^\phi(d)\sum_^\rfloor}\lfloor\frac\rfloor^2\mu(k)
\end
\]這樣可以做到單次詢問\(o(n)\),可以繼續推下去
\[\begin
&設t=kd\\
&\sum_^\phi(d)\sum_^\rfloor}\lfloor\frac\rfloor^2\mu(k)\\
&=\sum_^\lfloor\frac\rfloor^2\sum_\mu(k)\phi(\frac)\\
\end
\]發現後面那個玩意是個狄利克雷卷積形式,所以這玩意是個積性函式,上線性篩
當\(t\)為質數時
\[\begin
&\sum_\mu(k)\phi(\frac)\\
&=\mu(1)*\phi(t)+\mu(t)*\phi(1)\\
&=t-1-1\\
&=t-2
\end
\]當\(t\)為質數的平方時
\[\begin
&\sum_\mu(k)\phi(\frac)\\
&=\phi(p)*\mu(p)+\phi(p^2)*\mu(1)\\
&=-(p-1)+p(p-1)\\
&=-p+1+p^2-p\\
&=p^2-2p+1\\
&=(p-1)^2
\end
\]當\(t\)為質數的\(c\)次方時(\(c>2\))
\[\begin
&設c=3\\
&\sum_\mu(k)\phi(\frac)\\
&=\phi(p^3)*\mu(1)-\phi(p^2)*\mu(p)+0\\
&=p^3-p^2-p^2+p\\
&=p^3-2p^2+p\\
&=p(p^2-2p+1)\\
&=p(p-1)^2
\end
\]同理可得當\(t=p^c(c>2)\)時,該函式的值為\(p^(p-1)^2\)
但是有這個\(p=2\)有點麻煩,所以我們不妨直接分類討論這兩種情況
設以上討論的那個函式為\(f\)
根據積性函式的定義即可
\[f(i*prime[j])=f(i)*f(prime[j])
\]當\(i\)中\(prime[j]\)的指數為\(1\)時,對應上方的\(t=p^2\)的情況
(注:因為指數為\(1\),所以\(i/prime[j]\)與\(prime[j]\)互質)
\[\begin
&f(i*prime[j])\\
&=f(i/prime[j])*f(prime[j]^2)\\
&=f(i/prime[j])*(prime[j]-1)^2
\end
\]當\(i\)中\(prime[j]\)的質數大於\(1\)時,對應上方\(t=p^c(c>2)\),將結論代入即可
\[\begin
&f(i*prime[j])\\
&=f(i)*prime[j]\\
\end
\](注:因為\(f(i)\)其實就是\(t=p^\)的情況,所以直接按照上方的結論乘上p即可)
然後就做完了
複雜度\(o(n+t\sqrt)\)
#include using namespace std;
typedef long long ll;
const int n = 1e7 + 10;
ll p[n];
ll n, cnt;
ll f[n], sum[n];
bool vis[n];
inline void init()
f[i * p[j]] = f[i] * f[p[j]];
} }for(int i = 1; i < n; ++i) f[i] += f[i - 1];
}inline ll calc(ll n)
return ans;
}int main()
}
尤拉心算 bzoj4804
問題 b 尤拉心算 bzoj4804 時間限制 2 sec 記憶體限制 256 mb 提交 74 解決 28 提交 狀態 題目描述 description 給出乙個數字n input 第一行為乙個正整數t,表示資料組數。接下來t行為詢問,每行包含乙個正整數n。t 5000,n 10 7 output...
BZOJ4804 尤拉心算
作者部落格 正解 莫比烏斯反演 解題報告 比較簡單的莫烏題,都是老套路了,最後設 q gt 可以根號回答一次詢問。注意後面那個積性函式的遞推公式!邊界不要漏了!it is made by ljh2000 有志者,事竟成,破釜沉舟,百二秦關終屬楚 苦心人,天不負,臥薪嘗膽,三千越甲可吞吳。includ...
4804 尤拉心算
4804 尤拉心算 time limit 15 sec memory limit 256 mb submit 229 solved 147 submit status discuss description 給出乙個數字n 第一行為乙個正整數t,表示資料組數。接下來t行為詢問,每行包含乙個正整數n。...