题意:给定一个数列${a_i}$,若子序列长度为$k$,最大公约数为$gcd$,定义子序列的权值为$k*\gcd (\gcd  > 1)$。求所有子序列的权值和。 答案对10^9+7取模。

解题关键:容斥原理求序列中各$gcd$的个数,亦可用莫比乌斯函数。

逆序求的话,前面直接减后面的个数,在后面一项就相当于相加了,如此往复。

关于知道所有$gcd$为$n$的个数之后答案的求法:

法一:

$\begin{array}{l}
1C_n^1 + 2C_n^2 + ... + nC_n^n\\
= n(C_{n - 1}^1 + C_{n - 1}^2 + ... + C_{n - 1}^{n - 1})\\
= n{2^{n - 1}}
\end{array}$

法二:

$\begin{array}{l}
[{(x + 1)^n}]' = n{(x + 1)^{n - 1}}\\
{(x + 1)^n} = \sum\limits_{i = 1}^n {C_n^i{x^i}} \\
n{(x + 1)^{n - 1}} = \sum\limits_{i = 1}^n {C_n^ii{x^{i - 1}}}
\end{array}$

法三:逆序相加

容斥解法:

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=1e9+;
#define inf 0x3f3f3f3f
ll c[],pw[],sum[];
int main(){
ll n,x,mx=-inf;
cin>>n;
pw[]=;
for(int i=;i<=n+;i++) pw[i]=pw[i-]*%mod;
for(int i=;i<n;i++) cin>>x,c[x]++,mx=max(mx,x);//hash一下
ll ct;
ll ans=;
for(int i=mx;i>;i--){
ct=;
for(int j=i;j<=mx;j+=i){
ct=(ct+c[j])%mod;
sum[i]-=sum[j];
}
sum[i]=(sum[i]+ct*pw[ct-]%mod+mod)%mod;
ans=(ans+sum[i]*i%mod+mod)%mod;
}
cout<<ans<<"\n";
return ;
}

莫比乌斯反演解法:

 #include<bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int mod=1e9+;
ll mu[],c[],cnt[],pw[],g[];
void sievemu(int n){
mu[]=;
for(int i=;i<=n;i++){
for(int j=i+i;j<=n;j+=i){
mu[j]-=mu[i];
}
}
} int main(){
sievemu();
ll n,x,mx=-inf;
cin>>n;
pw[]=;
for(int i=;i<=n;i++) pw[i]=pw[i-]*%mod;
for(int i=;i<n;i++) cin>>x,c[x]++,mx=max(mx,x);
for(int i=;i<=mx;i++){
ll ss=;
for(int j=i;j<=mx;j+=i){
ss+=c[j];
}
if(ss) cnt[i]=ss*pw[ss-]%mod;
}
//计算gcd倍数的个数 //对答案进行莫比乌斯反演
ll ans=;
for(int i=;i<=mx;i++){
for(int j=i;j<=mx;j+=i){
g[i]=(g[i]+cnt[j]*mu[j/i]%mod+mod)%mod;
}
ans=(ans+i*g[i]%mod+mod)%mod;
}
cout<<ans<<"\n";
return ;
}

[cf839d]Winter is here容斥原理的更多相关文章

  1. CF839D Winter is here

    题目分析 显然我们不可能直接计算每一个子序列的贡献,而应该计算对于每一个gcd对答案的贡献. 考虑容斥.按照套路: 设\(q(i)\)表示序列\(gcd\)为\(i\)的倍数的序列长度和. 设\(g( ...

  2. Codeforces 839D Winter is here - 暴力 - 容斥原理

    Winter is here at the North and the White Walkers are close. John Snow has an army consisting of n s ...

  3. Codeforces 839D Winter is here【数学:容斥原理】

    D. Winter is here time limit per test:3 seconds memory limit per test:256 megabytes input:standard i ...

  4. Codeforces 839D Winter is here(容斥原理)

    [题目链接] http://codeforces.com/contest/839/problem/D [题目大意] 给出一些数,求取出一些数,当他们的GCD大于0时,将数量乘GCD累加到答案上, 求累 ...

  5. 【容斥原理】Codeforces Round #428 (Div. 2) D. Winter is here

    给你一个序列,让你对于所有gcd不为1的子序列,计算它们的gcd*其元素个数之和. 设sum(i)为i的倍数的数的个数,可以通过容斥算出来. 具体看这个吧:http://blog.csdn.net/j ...

  6. hdu4059 The Boss on Mars(差分+容斥原理)

    题意: 求小于n (1 ≤ n ≤ 10^8)的数中,与n互质的数的四次方和. 知识点: 差分: 一阶差分: 设  则    为一阶差分. 二阶差分: n阶差分:     且可推出    性质: 1. ...

  7. hdu2848 Visible Trees (容斥原理)

    题意: 给n*m个点(1 ≤ m, n ≤ 1e5),左下角的点为(1,1),右上角的点(n,m),一个人站在(0,0)看这些点.在一条直线上,只能看到最前面的一个点,后面的被档住看不到,求这个人能看 ...

  8. BZOJ2301: [HAOI2011]Problem b[莫比乌斯反演 容斥原理]【学习笔记】

    2301: [HAOI2011]Problem b Time Limit: 50 Sec  Memory Limit: 256 MBSubmit: 4032  Solved: 1817[Submit] ...

  9. BZOJ 2440: [中山市选2011]完全平方数 [容斥原理 莫比乌斯函数]

    2440: [中山市选2011]完全平方数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3028  Solved: 1460[Submit][Sta ...

随机推荐

  1. linux删除文件夹的命令

    使用rm -rf 目录名字 命令即可 -r 就是向下递归,不管有多少级目录,一并删除-f 就是直接强行删除,不作任何提示的意思 eg 删除文件夹实例:rm -rf /var/log/httpd/acc ...

  2. 如何解决Asp.Net MVC和WebAPI的Controller名称不能相同的问题

    1.问题描述 假如有一个文章的业务(Article),我们在 Controllers文件夹中创建MVC Controller和Api Controller,各个Controller中都有相同的获取文章 ...

  3. KinedEditor特性

    谷歌浏览器会将kindeditor在其他js文件加载完之后加载 kindeditor是异步加载,document.ready完了,kindeditor可能还没加载完 kind会将选区变成一个节点 1. ...

  4. finally return 执行关系 异常处理 c#

    Return.finally执行关系简述 除了函数出现system.exit(0)终止虚拟机,finally中的代码一定执行,return语句会等待finally的执行:如果是值传递,finally中 ...

  5. Referrer-Policy常见属性

    Referrer-Policy(来源协议)用来规定什么情况下显示Referer字段及refer字段内显示多少信息. 备注: referer实际上是对referrer的误写,因为写错的人多了也就正确了. ...

  6. 剑指offer——不能被继承的类

    方法一:通过将类的构造函数和析构函数声明成private来防止子类继承.声明静态的方法来构造和析构类的对象. 但是用起来不是很方便.只能得到在堆上的实例,而不能得到在栈上的实例. 方法二:构造辅助类C ...

  7. JQUERY获取html标签自定义属性值或data值

    //获取属性值 1 <div id="text" value="黑哒哒的盟友"><div> jQuery取值: $("#tex ...

  8. php中session的配置

    在 php.ini 中搜  session.save_path 查看session文件保存的目录;

  9. jquery 整理笔记(一)

    this:表示当前的上下文对象是一个html对象,可以调用html对象所拥有的属性,方法 $(this),代表的上下文对象是一个jquery的上下文对象,可以调用jquery的方法和属性值. each ...

  10. 并发问题引出ThreadLocal

    ThreadLocal Thread-->人类Runnable-->任务类 多线程并发问题引出ThreadLocal 多线程并发问题的原因: 操作同一个对象,对对象具有读写权限(只读如拍照 ...