好久没更博客了,先水一篇再说。其实这个做法应该算是杜教筛的一个拓展。

powerful number的定义是每个质因子次数都 $\geq 2$ 的数。首先,$\leq n$ 的powerful number个数是 $O(\sqrt{n})$ 的,这是因为所有powerful number显然可以表示成 $a^2b^3$,所以个数不超过 $\sum_{i=1}^{\sqrt{n}} (n/i^2)^{1/3}$,积分积一下就算出来了。求所有 $\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_{i=0}^q G(p^i)H(p^{q-i})$ 和 $H(1)=1$ 不难发现对于所有质数 $p$,$H(p)=0$。

我们欲求的是 $\sum_{i=1}^n F(i)$,由于 $F=H*G$(乘法为狄利克雷卷积),那么有 $\sum_{i=1}^n F(i)=\sum_{ij \leq n} H(i)G(j)=\sum_{i=1}^n H(i) \sum_{j=1}^{n/i} G(j)$。

由于 $H(p)=0$,所有 $H(i) \neq 0$ 的位置显然都是powerful number,我们只需枚举所有powerful number,算出对应的 $H$ 即可。

例题2  pe48?

求满足对质数 $p$,$F(p^d)=p^{d-[d \bmod 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 <bits/stdc++.h>
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[1]=1;
for(int i=2;i<SZ;++i)
{
if(!np[i]) ps[++pn]=i,ph[i]=i-1;
for(int j=1;j<=pn&&i*ps[j]<SZ;++j)
{
np[i*ps[j]]=1;
if(i%ps[j]==0)
{
ph[i*ps[j]]=ph[i]*ps[j];
break;
}
ph[i*ps[j]]=ph[i]*(ps[j]-1);
}
}
for(int i=1;i<SZ;++i)
ph[i]=(ph[i-1]+ph[i])%MOD;
}
ll n,u,s[1005];
ll S2(ll a)
{
ll b=a+1;
if(a&1) b>>=1; else a>>=1;
return (a%MOD)*(b%MOD)%MOD;
}
int h[100099][66],d[100099];
ll ans=0;
void dfs(ll x,ll v,int w)
{
ans=(ans+v*((n/x<SZ)?ph[n/x]:s[n/(n/x)]))%MOD;
if(w>1&&x>n/ps[w]/ps[w]) return;
for(int s=w;s<=pn;++s)
{
if(s>1&&x*ps[s]*ps[s]>n) break;
ll y=x*ps[s];
for(int j=1;y<=n;++j,y*=ps[s])
{
if(d[s]<j)
{
++d[s];
ll F=ps[s]^j,G=ps[s]-1;
for(int k=1;k<=j;++k)
F=(F-G%MOD*h[s][j-k])%MOD,G*=ps[s];
h[s][j]=F;
}
if(!h[s][j]) continue;
dfs(y,v*h[s][j]%MOD,s+1);
}
}
}
int main()
{
for(int i=0;i<=100000;++i)
h[i][0]=1;
shai(); cin>>n;
u=1; while(n/u>=SZ) ++u;
for(int i=u;i>=1;--i)
{
//s[i]=phi(n/i)
ll t=n/i,a=2,b,p; s[i]=S2(t);
for(;a<=t;a=b+1)
p=t/a,b=t/p,
s[i]=(s[i]-(b-a+1)%MOD*((p<SZ)?ph[p]:s[b*i]))%MOD;
}
dfs(1,1,1);
ans=(ans%MOD+MOD)%MOD;
cout<<ans<<"\n";
}

利用powerful number求积性函数前缀和的更多相关文章

  1. powerful number求积性函数前缀和

    算法原理 本文参考了 zzq's blog . \(\text{powerful number}\) 的定义是每个质因子次数都 \(\ge 2\) 的数,有个结论是 \(\ge n\) 的 \(\te ...

  2. 【Learning】积性函数前缀和——洲阁筛(min_25写法)

    问题描述 洲阁筛解决的问题主要是\(n\)范围较大的积性函数前缀和. ​ 已知一积性函数\(f(i)\),求\(\sum_{i=1}^nf(i)\). \(n\leq10^{12}\). 求解方法 如 ...

  3. Mobius反演与积性函数前缀和演学习笔记 BZOJ 4176 Lucas的数论 SDOI 2015 约数个数和

    下文中所有讨论都在数论函数范围内开展. 数论函数指的是定义域为正整数域, 且值域为复数域的函数. 数论意义下的和式处理技巧 因子 \[ \sum_{d | n} a_d = \sum_{d | n} ...

  4. A New Function(LightOJ 1098)积性函数前缀和的应用

    题意:要求对于1~n,每个数的约数(不包括1和其本身)的和. 题解:由于题目数据有2*10^9之大,因而不能直接暴力.需要考虑积性函数的特性,由于必定有重复的约数出现,因而可以对重复约数所在的区间进行 ...

  5. Powerful Number 学习笔记

    定义 对于一个正整数 \(n\) ,若完全分解之后不存在指数 \(=1\) ,则称 \(n\) 为 \(\text{Powerful Number}\) . 可以发现的是,在 \([1,n]\) 中, ...

  6. [笔记] Powerful Number 筛

    定义 Powerful Number(以下简称 PN)筛类似于杜教筛,可以拿来求一些积性函数的前缀和. 要求: 假设现在要求积性函数 \(f\) 的前缀和 \(F(n)=\sum_{i=1}^nf(i ...

  7. Powerful Number 筛学习笔记

    Powerful Number 筛学习笔记 用途 \(Powerful\ number\) 筛可以用来求出一类积性函数的前缀和,最快可以达到根号复杂度. 实现 \(Powerful\ number\) ...

  8. Note - Powerful Number

    Powerful Number   对于 \(n\in\mathbb N_+\),若不存在素数 \(p\) 使得 \(p\mid n~\land~p^2\not\mid n\),则称 \(n\) 为 ...

  9. Powerful Number 筛法

    我也不想学筛法了,可你考试时候出一个新筛法就不厚道了吧,我还开始以为这是杜教筛... $tips:$学完杜教筛立马学$Powerful \ Number$筛法,此筛法强悍如斯 $Powerful \ ...

随机推荐

  1. java的myeclipse,java页面改动默认的javadoc方法

    在项目中右键点击新建class文件,在弹出的框中选择"here" 勾上enable project specific settings 选择comments中的types然后点击e ...

  2. Linux中一个网卡含有多个IP,将从IP升级为主IP的方法

    今天在查看虚拟机的时候,发现某一网卡含有多个IP地址: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fas ...

  3. php web开发安全之sql注入和防范:(一)简单的select语句注入和防范

    sql注入主要是指通过在get.post请求参数中构造sql语句,以修改程序运行时所执行的sql语句,从而实现获取.修改信息甚至是删除数据的目的,sql被注入的原因主要是代码编写的有问题(有漏洞),只 ...

  4. Android开发——进程间通信之Messenger

    0.  前言 不论是Android还是其他操作系统,都会有自己的IPC机制,所谓IPC(Inter-Process Communication)即进程间通信.首先线程和进程是很不同的概念,线程是CPU ...

  5. 内幕:XX二手车直卖网,狗屁直卖网,我来揭开他们套路!

    转自:明锐论坛   我是一位花生二手车直卖网的离职员工.已离职了一段时间,现在在某家汽车4S店公司上班.过去了那么久,每当看到他们铺天盖地的广告,心里都像十五个水桶--七上八下.思索已久,我还是决定鼓 ...

  6. http to https

    https://www.cnblogs.com/powertoolsteam/p/http2https.html

  7. Azure SQL Database Active Geo-Replication 简介

    对于数据库的维护来说,备份工作可谓是重中之重.MS Azure 当然也提供了很完善的数据库备份功能.但是在动手创建备份计划前请思考一下备份工作的真实目的.当然首先要保证数据的安全,一般来说定时创建数据 ...

  8. 如何干净的卸载docker

    先上服务器环境信息: 卸载的原因: 宿主机过段时间就磁盘100%了,导致continart异常退出,后来找了很多解决方案,才发现是安装docker的时候有个配置文件错误(正常的应该是|Storage ...

  9. ELK日志方案--使用Filebeat收集日志并输出到Kafka

    1,Filebeat简介 Filebeat是一个使用Go语言实现的轻量型日志采集器.在微服务体系中他与微服务部署在一起收集微服务产生的日志并推送到ELK. 在我们的架构设计中Kafka负责微服务和EL ...

  10. 微软职位内部推荐-Software Engineer II-Search

    微软近期Open的职位: Do you want to work on a fast-cycle, high visibility, hardcore search team with ambitio ...