51nod 1742 開心的小Q 莫比烏斯函式

2022-07-27 15:18:34 字數 1085 閱讀 7773

題解:

分析:- - 完全是看著題解還想半天才會做的。。糾正乙個錯誤,題解中的f(n)和s(n)中都應該是取整而不是下取整.首先s(n)的式子不難想到,問題就在於資料範圍太大,強求會t掉.換一下求和順序,列舉i/d,再列舉d,就可以將原式變形成乙個對f(n)求和的式子,然後從1到n中,f(i)有重複,只需要計算一次再乘個數就行了,相當於做乙個分塊.然後求f(n)時又做了乙個變換,可以這麼理解:總共有n個數,減去無平方因子數即可,列舉i從1到n,減去每個數的平方倍數的個數,因為這些數一定有平方因子,再由容斥原理,加回被減兩次的,以此類推...實際上i超過根號n時沒有倍數小於n,所以i只需要到根號n.

1 #include2 #include3 #include4

using

namespace

std;

5 typedef long

long

ll;6

const

int maxn=1e9+5,maxlen=32000;7

int mu[maxlen],prinum[maxlen],len=0

,a,b,f[maxlen];

8void

calpri()18}

19//

預處理前根號n個mu

20void

calmu()

29 mu[prinum[j]*i]=-mu[i];30}

31}32}

33 ll f(int

n)39

return

ans;40}

41 ll s(int

n)48

return

ans;49}

50//

ll text(int n)

56//

return ans;

57//}58

intmain()

51nod 1742 開心的小Q

我們由於莫比烏斯函式如果有平方數因子就是0,那麼我們可以列出這樣的式子 sum sum 1 mu d 然後列舉倍數 sum sum rfloor 1 mu d sum f lfloor frac rfloor f x 就表示1 x有多少數有平方因子 可以用容斥得到 f n n sum mu i lf...

51nod 歡樂手速場C 開心的小Q

開心的小q tangjz 命題人 quailty 測試 基準時間限制 1 秒 空間限制 131072 kb 分值 80 如果乙個數字存在乙個約數是完全平方數,那麼小q就認為這個數是有趣的。小q喜歡收集有趣的數字,每找到乙個有趣的數,小q就會變得很開心。小q發現12是有趣的,18也是有趣的,它們都是3...

51nod 1778 小Q的集合

原題連線 題目繞了一點。並沒有直接給出數字形式。而且這個題有好像有很多方法。我也yy了乙個 不過還是題解多效率高 題目中是給定了乙個集合 s 並且有 s n 要說明的是。這個集合是沒有重複元素的集合。這一點很重要 其實不特別說明。一般集合也都沒有重複元素。集合s的子集數量等價於 從 s 中取元素的取...