UESTC618 無完全平方因子數

2022-06-02 06:30:13 字數 877 閱讀 6413

題意:

給定乙個\(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...