題意:
給定乙個\(n\),求區間\([1,n]\)中的無平方因子數的個數。
比如說20就是乙個有平方因子數,因為\(20=2^2\times 5\)。
思路:對於乙個數,根據算術基本定理,一定可以拆成若干個整數相乘的形式,記為\(x=p_1^,...,p_n^\)的形式。
那麼答案就是莫比烏斯函式的平方和。
\[s(n) = \sum_^n \mu^2(i)
\]雖然這裡看起來很明顯的需要杜教篩,但是我找不出合適的\(g\)函式來捲,可能有方法,但我不知道。
考慮乙個數\(p\),那麼\(p^2\)的倍數都有平方因子,這樣的數字有\(\frac\)個,應該從答案中去除。
但是對於兩個素數\(p_1,p_2\)而言,\(p_1^2p_2^2\)的倍數會被去掉兩次,所以應該加回來,這裡顯然是容斥原理,而且莫比烏斯函式恰好為係數。
假設說\(d\)是幾個不同的素數的乘積,那麼他們對答案的貢獻一定是:
\[\mu(d)\frac
\]所以說答案改寫為了:
\[\sum_^n\mu^2=\sum_^}\mu(d)\frac
\]
#includeusing namespace std;
typedef long long ll;
const int maxn = 2e6;
bool vis[maxn+10];
int primes[maxn+10], cnt, mu[maxn+10];
void init(int n)
for(int j = 1; primes[j] <= n/i; j++)
}}ll n;
void solve()
int main()
UESTC 我要長高
題意是 就是題目描述的那樣了吧 題意很顯而易見,一眼dp題 dp i j 代表第i個人身高為j時的最小消耗,dp i j min dp i 1 k abs j k c j h i 2 複雜度o n h i 2 很明顯有點大,學習了一下單調佇列優化dp之後,發現形如dp i min max dp j ...
UESTC 方老師與素數
方老師最近很喜歡素數,他想玩乙個遊戲 現在有兩個 4 位的素數 n 和 m 你一次可以改變 n 的一位數字,並且改變過後的新數字必須也是個素數,並且也不能有前導 0 請問使 n 變為 m 最少需要多少步。例如n 1033 m 8179 那麼可行的變化是 1033 1733 3733 3739 377...
UESTC 1552 尤拉函式
include include include include include includeusing namespace std define lc l,m,index 1 define rc m 1,r,index 1 1 define ll long long define inf 0x3f...