【学习笔记】Dirichlet前缀和
2024-09-07 22:25:37
\(\text{Solution:}\)
观察到一个\(a_i\)若对\(a_j\)有贡献,则必须\(i\)的所有质因子幂次小于等于\(j\)的质因子幂次。
于是,我们可以枚举质数的倍数并累加即可。其实就是把直接枚举每个数的倍数改为枚举质数的倍数,可以把\(O(n\log n)\)优化到\(O(n\log \log n).\)
注意:埃氏筛筛积性函数是可以做到\(O(n\log\log n)\)的(枚举质数的倍数),而直接枚举每一个数的倍数应该是\(O(n\log n)\)的。
#include<bits/stdc++.h>
using namespace std;
const int MAXN=20000000;
#define uint unsigned int
uint seed;
inline uint getnext(){
seed^=seed<<13;
seed^=seed>>17;
seed^=seed<<5;
return seed;
}
bitset<MAXN+1>vis;
int cnt,n;
uint a[MAXN],ans,p[MAXN];
int main(){
scanf("%d",&n);
scanf("%u",&seed);
for(int i=1;i<=n;++i)a[i]=getnext();
for(int i=2;i<=MAXN;++i){
if(!vis[i])p[++cnt]=i;
for(int j=1;j<=cnt&&i*p[j]<=MAXN;++j){
vis[i*p[j]]=1;
if(i%p[j]==0)break;
}
}
for(int i=1;i<=cnt;++i){
for(int j=1;j*p[i]<=MAXN;++j){
a[j*p[i]]+=a[j];
}
}
for(int i=1;i<=n;++i)ans^=a[i];
cout<<ans<<endl;
return 0;
}
最新文章
- GIS公交查询-flex/java
- Windows下Apache服务器中自动配置二级子域名
- MFC 打开文件夹选择框并获取文件夹路径
- 【ros】rplidar Hector Slam
- python网页爬虫
- PHP 依赖注入 (转)
- 宣布 Azure Backup 支持备份 Windows Server 2008
- ecshop在nginx下实现负载均衡
- MVC无刷新查询,PagedList分页控件使用,导出Excel
- 支持缩放的fresco图片控件 —— fresco sample: ZoomableDraweeView
- JDBC API 可滚动可编辑的结果集
- shardingsphere多数据源(springboot + mybatis+shardingsphere+druid)
- iTerm2使用技巧
- ModelViewSet 路由 / django logging配置 / django-debug-toolbar使用
- 2017.08.08【NOIP提高组】模拟赛B组
- Python 爬虫实例(7)—— 爬取 新浪军事新闻
- [蓝桥杯]PREV-10.历届试题_幸运数
- HTTPS协议、TLS协议、证书认证过程解析
- Django Admin 专题
- PL/SQL Developer从11.0.6版本开始32/64为之区分