不净的圣杯 SRM 20

背景

作为一张BUG级别的卡,官方打算把它修改得人畜无害一些……

虽然名字还没想好,但是能力大概是对敌方所有单位造成d点伤害,d为自己牌组中所有卡的编号的最大公约数。这无疑是一个全新的技能类型,决定一出,负责“自动编辑卡组”系统的工程师们发愁了,要如何让AI把这一鬼畜设定考虑进去呢?我们现在只能假定每张牌被编进卡组的概率是相等的,工程师们想知道d的期望值。

描述

给n个数,问随机从中挑出一些数(大于等于1个)后,挑出数字的期望gcd。输出期望值乘并对1e9+7取模后的值。

输入格式

第一行两个正整数n,m。

第二行n个不超过m的正整数。

输出格式

一个整数,期望值乘并对1e9+7取模后的值。

样例输入

3 5
1 2 3

样例输出

10

数据范围

测试点 n m
1 10
2 10
3 10
4 20
5
6
7
8
9
10

样例解释

答案为1*5+2*1+3*1=10

—————————————————————————

这题一眼看去很明显的就是莫比乌斯反演(主观臆断QAQ

g(x)就是以x为gcd的方案数(子集数)

f(x)就是以x(及x的倍数)为gcd的方案数

f(x)可以暴力求O(mlogm) 可以先求出T(x)就是以是x倍数的数的个数

f(x)=2^T(x)-1 至于莫比乌斯函数mu(x)可以线性筛 这样之后及可以求答案辣

那个乘上2^n-1其实就是为了抵消期望而已 题目就是求gcd和

#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
const int M=1e6+,mod=1e9+;
int read(){
int ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
LL ans,g[M],n,m,k,w[M],t[M];
LL ly[M],f[M],vis[M],mu[M],cnt,p[M];
void prepare(){
ly[]=; for(int i=;i<=m;i++) ly[i]=ly[i-]*%mod;
mu[]=;
for(int i=;i<=m;i++){
if(!vis[i]){p[++cnt]=i;mu[i]=-;}
for(int j=;j<=cnt&&i*p[j]<=m;j++){
vis[i*p[j]]=;
if(i%p[j]) mu[i*p[j]]=-mu[i];
else{mu[i*p[j]]=; break;}
}
}
}
int main(){
n=read(); m=read();
prepare();
for(int i=;i<=n;i++) k=read(),w[k]++;
for(int i=;i<=m;i++){
for(int j=i;j<=m;j+=i) t[i]=(t[i]+w[j])%mod;
f[i]=(ly[t[i]]-+mod)%mod;
}
for(int i=;i<=m;i++) for(int k=;k*i<=m;k++) g[i]=(g[i]+mu[k]*f[k*i]%mod)%mod;
for(int i=;i<=m;i++) ans=(ans+g[i]*i%mod)%mod;
printf("%lld\n",(ans+mod)%mod);
return ;
}

最新文章

  1. js中apply()和call()方法的使用
  2. 1.Visual FoxPro 基础
  3. android Bitmap类方法属性 详细说明
  4. 【Linux】Linux 目录结构
  5. c++字符串变量---8
  6. Eclipse启动Tomcat后无法访问项目
  7. sublime个人快捷键
  8. 使用mitmf 来绕过HSTS站点抓取登陆明文
  9. C#中的选择查询相关
  10. requestCode 和 resultCode .
  11. iphone4s 关于大于400M的视频无法拷贝的问题
  12. HTML5画布(线条、渐变)
  13. nginx的基础应用
  14. centos7 基础命令
  15. spring-boot自定义favicon.ico文件
  16. Oracle报错#“ORA-01791: 不是 SELECTed 表达式”解决方法
  17. 点到圆弧的距离(csu1503)+几何
  18. form-layui
  19. R语言:多个因变量时,如何在plot函数中画多条曲线(plot,points,lines,legend函数)
  20. [UE4]Return Node节点好用法

热门文章

  1. lintcode-30-插入区间
  2. JSP传递数组给JS的方法
  3. c# 中base64字符串和图片的相互转换
  4. animate.css与wow.js制作网站动效
  5. 大全Kafka Streams
  6. c#控件的name和text属性有什么不同?
  7. [计算机网络] TCP的拥塞控制
  8. IO复用、多进程和多线程三种并发编程模型
  9. 【bzoj2435】[NOI2011]道路修建 树形dp
  10. hadoop 使用Avro求最大值