某一天,你發現了乙個神奇的函式f(
x)f (x
),它滿足很多神奇的性質:
1. f(1
)=1 f(1
)=
12. f(
pc)=
p⊕c f(p
c)=p
⊕c
(⊕表示異或)
3. f(a
b)=f
(a)f
(b) f(a
b)=f
(a)f
(b)(
a a
與b' role="presentation">b
b互質)
你看到這個函式之後十分高興,於是就想要求出∑n
i=1f
(i) ∑i=
1nf(
i)
由於這個數比較大,你只需要輸出 ∑n
i=1f
(i)mod(10
9+7)
∑ i=
1nf(
i)
mod(109
+7
)min_25版子題
【數論】min_25篩
**中包含遞迴和非遞迴版本,注釋中的均為遞迴版本,非注釋中的是非遞迴版本
全部改非遞迴的後更慢了???懵
#include
#include
#include
#define fo(i,a,b) for(int i=a;i<=b;++i)
#define fod(i,a,b) for(int i=a;i>=b;--i)
#define min(q,w) ((q)>(w)?(w):(q))
#define max(q,w) ((q)<(w)?(w):(q))
#define gall(q) ((1ll+(q))*(ll)(q)/2%mo)
using namespace std;
typedef long long ll;
const int n=200500,mo=1000000007;
intread(int &n)
ll n,ans;
int m;
bool prz[n];
int pr[n/3];
int prs[n],prc[n],ps[n];
void pre(int n)
}}/*ll gf(ll n,int
m)*/
ll d[n];
int dz1[n],dz[n];
int f[n],f0[n];
ll gf(ll n)
fo(j,1,pr[0]-1)
}return f[1]-f0[1];
}/*ll gg(ll n,int
m) return ans;
}*/int g[n];
ll gg(ll n)}}
return (g[1]+(f[1]-f0[1]))%mo;
}int main()
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...