利用powerful number求積性函式字首和

2022-02-02 05:39:13 字數 1806 閱讀 6660

好久沒更部落格了,先水一篇再說。其實這個做法應該算是杜教篩的乙個拓展。

powerful number的定義是每個質因子次數都 $\geq 2$ 的數。首先,$\leq n$ 的powerful number個數是 $o(\sqrt)$ 的,這是因為所有powerful number顯然可以表示成 $a^2b^3$,所以個數不超過 $\sum_^} (n/i^2)^$,積分積一下就算出來了。求所有 $\leq n$ 的powerful number只要暴搜質因子分解式即可。

例題1  pe63?

有乙個積性函式 $f$ 滿足對於所有質數 $p$,$f(p^q)=p~(q \geq 1)$,求 $f$ 的字首和。

我們發現有乙個跟它長得很像的積性函式 $g$!$g(x)=x$,我們會求 $g$ 的字首和!並且對於所有質數 $p$,$g(p)=f(p)=p$。

我們求出 $h=f/g$,其中除法指的是狄利克雷除法,即狄利克雷卷積的逆運算。$h$ 也是乙個積性函式,那麼由 $f(p^q)=\sum_^q g(p^i)h(p^)$ 和 $h(1)=1$ 不難發現對於所有質數 $p$,$h(p)=0$。

我們欲求的是 $\sum_^n f(i)$,由於 $f=h*g$(乘法為狄利克雷卷積),那麼有 $\sum_^n f(i)=\sum_ h(i)g(j)=\sum_^n h(i) \sum_^ g(j)$。

由於 $h(p)=0$,所有 $h(i) \neq 0$ 的位置顯然都是powerful number,我們只需列舉所有powerful number,算出對應的 $h$ 即可。

例題2  pe48?

求滿足對質數 $p$,$f(p^d)=p^$ 的積性函式 $f$ 的字首和。

$f(p)=1$。同上構造 $g(x)=1$ 即可。

例題3  loj6053

求滿足對質數 $p$,$f(p^c)=p \oplus c$ 的積性函式 $f$ 的字首和。

對 $p \neq 2$,$f(p)=p-1$。構造 $g=\varphi$ 即可,注意要特殊處理一下 $p=2$ 的情形。求尤拉函式的字首和可以杜教篩,這裡不再贅述。跑過min25篩是不可能的,這輩子都不可能跑過的

這裡給出loj6053的**:

#include using

namespace

std;

typedef

long

long

ll;const

int mod=1e9+7

;#define sz 10000099

bool

np[sz];

int ph[sz],ps[sz/10

],pn;

void

shai()

ph[i*ps[j]]=ph[i]*(ps[j]-1

); }

}for(int i=1;ii)

ph[i]=(ph[i-1]+ph[i])%mod;

}ll n,u,s[

1005

];ll s2(ll a)

int h[100099][66],d[100099

];ll ans=0

;void dfs(ll x,ll v,int

w)

if(!h[s][j]) continue

; dfs(y,v*h[s][j]%mod,s+1

); }

}}int

main()

dfs(

1,1,1

); ans=(ans%mod+mod)%mod;

cout

<"\n"

;}

mysql 利用 mysql利用

mysql 寫入webshell復現 1.直接寫入 windows成功率較高 1.檢視是否允許可寫 空可寫,null不行,5.5以前預設為空,5.5以後預設為null 2.寫入檔案 2.日誌檔案寫入shell 5.0以後會建立日誌檔案 資料庫許可權 1.檢視是否開啟日誌 2.開啟日誌 3.設定路徑 ...

利用AlwaysInstallElevated提權

2.啟用alwaysinstallelevated 3.提權 4.防禦方式 5.參考文章 alwaysinstallelevated是登錄檔的乙個鍵值,當其值為1的時候,普通使用者即可以system許可權安裝msi程式。certutil.exe urlcache split f開啟powershel...

鉤子的利用

在 ae 開發中,可以利用鉤子把 mapcontrol 給傳到由 itool 或者icommond 繼承的命令或者工具裡,傳進去的鉤子就是 hook 型別是乙個 object 實際上就是乙個 mapcontrol 可以用強制轉換為 mapcontrol icommand gtcstandard if...