題解:
分析:- - 完全是看著題解還想半天才會做的。。糾正乙個錯誤,題解中的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 #include4using
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 中取元素的取...