loj 6053 簡單的函式 min 25篩

2022-07-20 04:15:09 字數 1178 閱讀 1181

某一天,你發現了乙個神奇的函式\(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...