簡單的函式 Min 25篩

2022-02-05 10:57:07 字數 1312 閱讀 5637

%%yyb

%%zsy

就是實現一下min-25篩 篩積性函式的操作

首先要得到

$g(m,j)=\sum_^ \sum_^<=m} [\phi(p_t^e)*g([m/(p_t^e)],t+1)+\phi(p_t^)]$

​ $+(f(m)-(f(p_)))$

先要預處理後面的部分,得到$f(m)$和$f(p_)$

$f(p_)$可以直接篩素數的時候字首和計算一下

$f(m)$就要利用第一步的篩法了

發現,除了2之外的質數都是奇數,所以f(p^1)=p xor 1=p-1

對於2要特判

對於g,直接根據式子大力計算即可。

遞迴處理。由於值還是比較分散的,所以沒有記憶化的必要。(而且狀態很多,對空間極為不友好)

剪枝:pri[t]的平方大於n就不用繼續算了。

**:

#include#define il inline

#define reg register int

#define int long long

#define numb (ch^'0')

using

namespace

std;

typedef

long

long

ll;il

void rd(int &x)

namespace

miracle

for(reg j=1;j<=tot;++j)

}for(reg i=1;i<=tot;++i)

}int

id1[n],id2[n];

ll val[n];

ll n;

int s(int x,int

j) }

return

ret;

}int

main()

sqr=sqrt(n);

//cout<<" sqr "//cout<<" after sieve ";

for(ll i=1,x;i<=n;i=x+1

)

for(reg i=1;i<=m;++i)

for(reg j=1;j<=tot;++j)

}for(reg i=1;i<=m;++i)

//cout<<" after prewrk "%lld

",(s(n,1)+1)%mod);

return0;

}}signed main()

/*author: *miracle*

date: 2019/1/13 17:03:03

*/

演算法 Min 25篩

本篇文章中使用的字母 p 指 text p in text 若函式 f x 滿足,f x 是積性函式 f p 可以使用多項式表示。已知 f p 要能在常數級的時間內計算 f p x x in n min 25篩可以在 theta frac 的時間複雜度內計算 f x 的字首和 或者說 theta n...

總結 篩法 Min 25篩

對於積性函式f x f x f x 求 i 1i n f i 其中n 1011 左右 sum f i 其中n leq 10 左右 i 1 i n f i 其 中n 1 011左 右 必須滿足的條件是 當p為質數時,f p f p f p 必須能表示為乙個多項式的形式,即f p a0 a1p a2p ...

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的字首和 兩個陣列求法是一樣的,然後第...