浅谈powerful number

powerful number

定义:对于一个正整数 x=p1k1p2k2p3k3...pnkn,满足 1in,ki>1

性质1:所有 powerful number 都能被写成 a2b3 的形式。

证明1:若 ki 为偶数,就将其放入 a 中;若 ki 为奇数,就将其放入 b 中,若有余数再将其放入 a 中。

性质2:在 [1,n] 中有且存在 O(n) 个 powerful number。

证明2:考虑积分证明,得到个数为 1nnx23dx=3n123n13,所以是 O(n) 的。

PN 筛

找一个积性函数 g 与目标函数 f 在质数上值相同,即 p,f(p)=g(p),接着用 f=gh 得到函数 h,这个过程又叫拟合。PN 筛就是满足 f(p)=g(1)h(p)+g(p)h(1)=h(p)+g(p)h(p)=0,所以只有在 powerful number 处才会有值,而只有 O(n) 个这种值。

例题

这就属于很板的题了,由于 f(p)=2,所以会想到 d(p)=2,这里 d 表示约数个数,然后拟合就行了,属于是板题中的板题了。

这里贴一个找 powerful number 的代码,就直接按定义去找就行了(op 表示是否是新的 powerful number)。

void powerful_number(int x,int p,int op){
if(x==cnt+1) return ;
if(pri[x]*pri[x]>n/p) return ;
powerful_number(x+1,p,0);
for(int k=pri[x]*pri[x];k<=n/p;k=k*pri[x]){
powerful_number(x+1,p*k,1);
if(k>n/p/pri[x]) break;
}
}
posted @   ~Cyan~  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示