【GDOI2018模拟8.11】质数
来源:互联网 发布:黑色沙漠游侠捏脸数据 编辑:程序博客网 时间:2024/06/06 10:48
Description
求
f(i)表示i的不同的质因子个数
n<=10^12
Solution
我们设g(i)=2^f(i),显然g是积性函数
那么我们可以尝试杜教筛g
把g卷上一个mu,设g*mu=h
显然h也是积性函数
分析一下h(p^k),我们可以发现h(p^k)=[k==1]
特别的h[1]=1
那么归纳一下我们可以发现h=mu^2!!
也就是g*mu=mu^2
两边再卷上一个I,那么g=mu^2*I
说人话就是
这样是可以杜教筛的,但是由于出题人很不良心这样会被卡成暴力分
我们需要一个更优秀的解法
先把原式子写出来
枚举j=i/d,
考虑
如果存在一个p^2|d那么mu(d)^2=0否则mu(d)^2=1
如果我们考虑容斥,枚举一个p^2把答案减去n/(p^2)
但这样会算重所有我们要加上n/(p*p’)^2
可以发现容斥系数相当于mu
所以
后面可以分块,复杂度
Code
#include <cmath>#include <cstdio>#include <cstring>#include <algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)using namespace std;typedef long long ll;const int N=1e6+5,mo=998244353;int p[N],mu[N];bool bz[N];ll n,ans;void prepare(int n) { mu[1]=1; fo(i,2,n) { if (!bz[i]) p[++p[0]]=i,mu[i]=-1; fo(j,1,p[0]) { int k=i*p[j];if (k>n) break; bz[k]=1;if (!(i%p[j])) break; mu[k]=-mu[i]; } }}int main() { scanf("%lld",&n); int m=sqrt(n); prepare(m); fo(i,1,m) { if (!mu[i]) continue; int sum=0;ll nn=n/i/i; for(ll l=1,r;l<=nn;l=r+1) { r=nn/(nn/l); (sum+=(ll)(r-l+1)*(nn/l)%mo)%=mo; } if (mu[i]==1) (ans+=sum)%=mo; else (ans+=mo-sum)%=mo; } printf("%d\n",ans);}
阅读全文
0 0
- 【GDOI2018模拟8.11】质数
- 【GDOI2018模拟8.11】质数
- [JZOJ5250]【GDOI2018模拟8.11】质数
- 【jzoj5250】【GDOI2018模拟8.11】【质数】
- 【JZOJ5250】【GDOI2018模拟8.11】质数
- 【JZOJ 5250】【GDOI2018模拟8.11】质数
- 【GDOI2018模拟7.8】质数
- 质数,函数【GDOI2018模拟7.8】
- 【JZOJ5250】【GDOI2018模拟】质数(数论)
- 【GDOI2018模拟7.8】质数 乱搞+哥德巴赫猜想
- 【GDOI2018模拟8.11】决战
- 【GDOI2018模拟7.6】吃干饭
- 【GDOI2018模拟7.9】期末考试
- 【GDOI2018模拟7.8】矩阵
- 【GDOI2018模拟7.10】B
- 【GDOI2018模拟7.10】C
- 【GDOI2018模拟7.10】B
- 【GDOI2018模拟7.10】C
- 从怎样解题到怎样解决问题
- stm32 窗口看门狗 WWDG
- Angular 关于获取Matrix URL 和 普通URL 查询字符串问题
- 通过数据库链接_省市联动
- c++转换构造函数和类型转换函数
- 【GDOI2018模拟8.11】质数
- 【多校连萌三】问题 E: QAQ & 君临天下 || 天行九歌
- bzoj1012 [JSOI2008]最大数(单调栈+二分/线段树)
- Opencv OnMouse()函数
- RHCE——配置链路聚合和桥接
- 训练日记-10
- 达芬奇的鸡蛋
- 移动定位技术
- maven工程的创建(二)