某一天,你發現了乙個神奇的函式\(f(x)\),它滿足很多神奇的性質:
\(f(1)=1\)
\(f(p^c)=p \oplus c\) (\(p\) 為質數,\(\oplus\) 表示異或)。
\(f(ab)=f(a)f(b)\) (\(a\) 與 \(b\) 互質)。
你看到這個函式之後十分高興,於是就想要求出 \(\sum\limits_^n f(i)\)。
由於這個數比較大,你只需要輸出 \(\sum\limits_^n f(i) \bmod (10^9+7)\)
一行乙個整數 \(n\)。
一行乙個整數 \(\sum\limits_^n f(i) \bmod 1000000007\)。
6
233333
9876543210
16
179004642
895670833
對於\(30\%\)的資料,\(n \leq 100\)。
對於\(60\%\)的資料,\(n \leq 10^6\)。
對於\(100\%\)的資料,\(1 \leq n \leq 10^\)。
min_25篩,我們先找到\(f(p)\)
不難發現\(f(p)\)=\(p \oplus 1\),
對於除了2以外的質數\(f(p)=p-1,f(2)=3\)
可以把2當成其它來算,最後+2就行了
還是項\(\varphi\)一樣拆項,注意貢獻的統計,\(f(p^c)=p\oplus c\)
#include#define ll long long
ll in()
const int maxn = 2e6 + 100;
const int mod = 1e9+7;
ll g0[maxn], g1[maxn], a[maxn];
ll n, m, sqt;
ll pri[maxn], tot;
int getid(ll x)
ll getans(ll a, int b)
signed main()
} }printf("%lld\n", ((getans(n, 1) + 1 + (n > 1) * 2)) % mod);
return 0;
}
loj6053 簡單的函式 min25篩
對於100 的資料,n 1e10 首先,考慮質數,即c 1的情形,f 2 3,其餘f p p 1,這裡就先統一f p p 1處理,然後對第乙個質數特判加2 由於f p p 1,所以這裡拆成兩部分,g用來算前面一項,質數p的字首和,h用來算後面一項,質數的個數即1的字首和 兩個陣列求法是一樣的,然後第...
Loj 6053 簡單的函式 Min25篩
定義乙個積性函式 f p c p xor c 求 sum nf i 異或這個東西不太好搞,要考慮怎麼求出 g 陣列。當 p 為質數時 f p p 1 所以我們讓 g n sum n i in pri i 1 就好了。然後因為 i 1 不是完全積性函式,所以拆成 i 和 1 分開來就好了。然後因為 f...
LOJ 6053 簡單的函式 Min 25篩
題目鏈結 min 25篩見這裡 給定 n 求積性函式 f p c p oplus c 的字首和。oplus 表示異或運算。n leq 10 所求積性函式為 f p c p oplus c,quad p in prime 先考慮質數的貢獻。因為除 2 以外的質數 p 都是奇數,所以 f p p 1 f...