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

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";
}

转载于:https://www.cnblogs.com/zzqsblog/p/9904271.html

利用powerful number求积性函数前缀和相关推荐

  1. 利用 Powerful Number 求数论函数前缀和

    利用 Powerful Number 求数论函数前缀和 0. 前言 Powerful Number 可以用来快速求解数论函数的前缀和. 本文参考了: zzq's blog 攀岩高手 的博客 在此向以上 ...

  2. 2018ACM-ICPC南京赛区网络赛: J. Sum(积性函数前缀和)

    J. Sum A square-free integer is an integer which is indivisible by any square number except 11. For ...

  3. 51nod 1244 莫比乌斯函数之和(积性函数前缀和)

    关于积性函数前缀和的问题,可以关注糖老师的博客 关于积性函数前缀和的问题,可以关注糖老师的博客 http://blog.csdn.net/skywalkert/article/details/5050 ...

  4. 线性筛求积性函数的模板

    ACM常用模板合集 void sieve() {tot = 1;memset(vis, 0, sizeof(vis));low[1] = 1;G[1] = 函数G(n) n=1时的定义for (int ...

  5. 浅谈一类积性函数的前缀和(转载)

    本文转自:http://blog.csdn.net/skywalkert/article/details/50500009 另外,莫比乌斯反演和杜教筛其他可转到 http://blog.leanote ...

  6. 杜教筛【莫比乌斯前缀和,欧拉函数前缀和】推导与模板【一千五百字】

    下图给出杜教筛详细推导过程,前置知识有积性函数和莫比乌斯反演. 杜教筛是一种优秀的求积性函数前缀和算法,其时间复杂度受预处理数组的影响,一般开到2/3次幂大小,可使复杂度达到较为优秀的程度. 杜教筛的 ...

  7. 使用RANK函数按计算机基础的降序求名次,在EXCEL中如何利用RANK(number,ref,order)函数求名次排名...

    在EXCEL中如何利用RANK(number,ref,order)函数求名次排名 关注:234  答案:4  手机版 解决时间 2021-02-11 11:16 提问者夏日╮悲歌 2021-02-11 ...

  8. 积性函数的性质及证明 + 线性筛

    引言 在数论问题中,积性函数有着广泛的应用. 如在莫比乌斯反演问题中,函数变换之后如何快速维护前缀和往往是最重要也是最难的一步.如果维护的函数具有积性,那就可以尝试利用线性筛在O(n)O(n)O(n) ...

  9. 杜教筛(上):整除分块,积性函数,欧拉与莫比乌斯

    整除分块: 当我们求∑i=1nf(⌊ni⌋)\sum_{i=1}^nf(\lfloor\frac{n}{i}\rfloor)∑i=1n​f(⌊in​⌋)的时候,如果1到n求一遍感觉太傻了,因为会有很多 ...

最新文章

  1. pretty_errors_python
  2. 中国唯一一座没有高楼大厦的新一线城市,也太佛了吧
  3. MySql数据库查询表信息/列信息(列ID/列名/数据类型/长度/精度/是否可以为null/默认值/是否自增/是否是主键/列描述)...
  4. rto净化效率计算公式_全面剖析 石油化工行业RTO蓄热式焚烧炉的优势要素
  5. applicationcontext添加配置_让小白也能懂的Bean配置方法
  6. Python_列表生成式
  7. Web Server监视器 v0.75 - Free tool
  8. VBA EXCEL 常用代码
  9. Win10专业工作站版的Ghost备份与还原
  10. 为PDF批量添加书签
  11. 周星驰vs韩寒vs宁浩…Python告诉你春节该看哪部电影
  12. 个人微信公众号申请流程
  13. 前端是什么,是干嘛的
  14. Redis持久化中的AOF(Append Only File)持久化
  15. 关于WPC无线充QI认证的发展
  16. Deepin + Veket 双Linux U盘随身系统
  17. 如何查看Linux系统的状态信息?
  18. mysql 慢日志 逻辑读_运维日记| MySQLOracle深度解析之一:逻辑读
  19. 博弈论——非合作博弈 什么是纳什均衡
  20. 我最喜欢的科目是计算机英语,我最喜欢的科目英语作文带翻译

热门文章

  1. 学生成绩管理系统(转载)
  2. 一句话木马(最新免杀php后门一句话)
  3. c++当中strtotime函数
  4. pytorch中repeat()函数理解
  5. C语言REPEAT程序,汇编语言定使用WHILE、REPEAT、FOR 和 FORC伪指令定义重复语句块
  6. Python 字符串
  7. 【安全攻防知识-3】学习平台搭建汇总
  8. GLUT, freeGLUT, GLFW, GLEW, GLAD 关系与区别
  9. STM32学习笔记——OLED的使用
  10. 什么是字节码?采用字节码的最大好处是什么?