題目大意:從前有個積性函式 $f$ 滿足 $f(1)=1,f(p^k)=p\oplus k$。(異或)求其前 $n$ 項的和對 $10^9+7$ 取模的值。
$1\le n\le 10^$。
這種奇怪但是簡潔的積性函式求和,首選 min_25 篩。
首先可以發現,對於質數 $p$,$p\ge 3$ 時 $f(p)=p-1$,$p=2$ 時 $f(p)=p+1$。
所以可以先把 $f(2)$ 看做 $1$,這樣方便處理 $g$,最後計算 $s$ 時再加個 $2$ 就好了。
至於 min_25 篩的具體流程,打個廣告
時間複雜度 $o(\frac})$。
#includeusingview codenamespace
std;
typedef
long
long
ll;const
int maxn=666666,mod=1000000007,inv2=500000004
;#define for(i,a,b) for(int i=(a);i<=(b);i++)
#define rof(i,a,b) for(int i=(a);i>=(b);i--)
#define mem(x,v) memset(x,v,sizeof(x))
intsq,pri[maxn],pl,tot,id1[maxn],id2[maxn],g0[maxn],g1[maxn],s1[maxn];
bool
vis[maxn];
ll n,w[maxn];
inline
int add(int a,int b)
inline
int sub(int a,int b)
inline
int mul(int a,int b)
inline
int id(ll x)
inline
int pre1(ll x)
inline
int pre2(ll x)
void
init()
}for(ll l=1,r;l<=n;l=r+1)}
void
calc_g()
}int solve(ll nn,int
x) }
return
ans;
}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...