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