LOJ6053 簡單的函式(min 25篩)

2022-05-11 03:53:01 字數 1215 閱讀 8870

題目大意:從前有個積性函式 $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})$。

#includeusing

namespace

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()

view code

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...