LINK:LCMs

随便找了道题练习了一下莫比乌斯反演 式子有两个地方化简错误 导致查了1h的错。

讲一下大致思路 容易发现直接做事\(n^2logn\)的。

观察得到数字集合大小为1e6.

可以设\(b_i\)表示i出现了多少次 再进行计算LCM。

经过一些处理可以开始反演。

可以直接得到一个nlogn的做法。经过更换枚举顺序后 之后nlogn预处理前缀和可以\(sqrt(n)\)求答案。

推式子的时候要小心一点 很容易推错的。

const int MAXN=1000010,INV=(mod+1)>>1;
int n,maxx,top;
int a[MAXN],s[MAXN];
int v[MAXN],p[MAXN],mu[MAXN];
inline void prepare()
{
mu[1]=1;
rep(2,maxx,i)
{
if(!v[i])
{
p[++top]=i;
v[i]=i;mu[i]=-1;
}
rep(1,top,j)
{
if(p[j]>maxx/i)break;
v[p[j]*i]=p[j];
if(v[i]==p[j])break;
mu[p[j]*i]=-mu[i];
}
}
rep(1,maxx,i)
{
int ww=maxx/i;
rep(1,ww,j)s[i]=(s[i]+(ll)j*a[i*j])%mod;
}
}
signed main()
{
freopen("1.in","r",stdin);
get(n);int cnt1=0,cnt2=0;
rep(1,n,i){int get(x);++a[x];maxx=max(maxx,x);}
prepare();int ans=0;
rep(1,maxx,i)
{
cnt1=(cnt1+(ll)a[i]*a[i]%mod*i)%mod;
cnt2=(cnt2+((ll)a[i]*(a[i]-1)/2)%mod*i)%mod;
int ww=maxx/i;
rep(1,ww,j)
ans=(ans+(ll)mu[j]*j*j%mod*i%mod*s[(i*j)]%mod*s[(i*j)])%mod;
}
ans=(ll)(ans-cnt1+mod)*INV%mod;
ans=(ans+cnt2)%mod;put(ans);
return 0;
}

最新文章

  1. LeetCode之100. Same Tree
  2. 分析案例:应用服务无响应,任务管理器中发现大量w3wp僵尸进程----等待异构系统WebService返回值
  3. 第九周PSP
  4. maven依赖非maven库中jar的两种方法
  5. ! cocos2d 预编译重复
  6. Visio编辑数据库模型列
  7. 简单模拟Hibernate的主要功能实现
  8. 【转】bootbox自定义dialog、confirm、alert样式,以及基本设置方法setDefaults中可用参数
  9. jaxb和dozer简介
  10. css导航条等元素位置不变
  11. HashMap原理解析
  12. 关于在Idea 创建Maven项目时,无法在source文件下创建servlet文件问题解决!
  13. CentOS安装PHP7.*
  14. Consul安装使用
  15. Docker容器集群管理之Swarm
  16. java 线程 (三)线程并发的安全性 同步代码块
  17. kafka4 副本机制
  18. linux 函数库使用
  19. HDU-1226 超级密码 (BFS+剪枝)
  20. Hbase 维护

热门文章

  1. 如何使用JS操纵伪元素
  2. (三)ansible playbook
  3. FocusBI:《商业智能7B理论模型》创造者
  4. cf1216E2 Numerical Sequence (hard version)(思维)
  5. List集合的遍历方式
  6. Window - 安装 Jenkins
  7. Scala 面向对象(二):package 包 (一) 入门
  8. java 面向对象(十四):面向对象的特征二:继承性 (三) 关键字:super以及子类对象实例化全过程
  9. 目录(Django开发)
  10. Java数据类型自动转换(++ ,+=)