[cf839d]Winter is here容斥原理
题意:给定一个数列${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容斥原理的更多相关文章
- CF839D Winter is here
题目分析 显然我们不可能直接计算每一个子序列的贡献,而应该计算对于每一个gcd对答案的贡献. 考虑容斥.按照套路: 设\(q(i)\)表示序列\(gcd\)为\(i\)的倍数的序列长度和. 设\(g( ...
- 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 ...
- Codeforces 839D Winter is here【数学:容斥原理】
D. Winter is here time limit per test:3 seconds memory limit per test:256 megabytes input:standard i ...
- Codeforces 839D Winter is here(容斥原理)
[题目链接] http://codeforces.com/contest/839/problem/D [题目大意] 给出一些数,求取出一些数,当他们的GCD大于0时,将数量乘GCD累加到答案上, 求累 ...
- 【容斥原理】Codeforces Round #428 (Div. 2) D. Winter is here
给你一个序列,让你对于所有gcd不为1的子序列,计算它们的gcd*其元素个数之和. 设sum(i)为i的倍数的数的个数,可以通过容斥算出来. 具体看这个吧:http://blog.csdn.net/j ...
- hdu4059 The Boss on Mars(差分+容斥原理)
题意: 求小于n (1 ≤ n ≤ 10^8)的数中,与n互质的数的四次方和. 知识点: 差分: 一阶差分: 设 则 为一阶差分. 二阶差分: n阶差分: 且可推出 性质: 1. ...
- hdu2848 Visible Trees (容斥原理)
题意: 给n*m个点(1 ≤ m, n ≤ 1e5),左下角的点为(1,1),右上角的点(n,m),一个人站在(0,0)看这些点.在一条直线上,只能看到最前面的一个点,后面的被档住看不到,求这个人能看 ...
- BZOJ2301: [HAOI2011]Problem b[莫比乌斯反演 容斥原理]【学习笔记】
2301: [HAOI2011]Problem b Time Limit: 50 Sec Memory Limit: 256 MBSubmit: 4032 Solved: 1817[Submit] ...
- BZOJ 2440: [中山市选2011]完全平方数 [容斥原理 莫比乌斯函数]
2440: [中山市选2011]完全平方数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3028 Solved: 1460[Submit][Sta ...
随机推荐
- error in static/js/xxx.js from UglifyJs Unpected token: punc() [static/js/xxx.js]
出现问题 使用vue+element-ui+webpack开发项目时,Jenkins构建出现报错error in static/js/xxx.js from UglifyJs Unpected tok ...
- HDU - 5703 Desert 【找规律】
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5703 题意 给出一杯容量为N的水 每次至少喝1个单位 有多少种不同的方式喝完 比如 给出3 就有4种方 ...
- vim终端配色(非gui版本)——Monokai
啥也别说,先上图. 具体配置: 1. 将molokai.vim文件(下面贴出)放到 ~/.vim/colors 目录下,如没有此文件夹需自行创建. 提示:~ 代表用户主目录,如我的用户名是 akaed ...
- poj 1028 Web Navigation 【模拟题】
题目地址:http://poj.org/problem?id=1028 测试样例: Sample Input VISIT http://acm.ashland.edu/ VISIT http://ac ...
- nginx源码中upstream的主要流程
upstream 即上游的意思,是一个想对到概念,从客户端到中间的网络链路到服务器到链路中,可以将越接近客户到设备越理解成下游,相反到为上游,所以如果只有一个upstream,可以将其为理解成转发客户 ...
- 投影矩阵、最小二乘法和SVD分解
投影矩阵广泛地应用在数学相关学科的各种证明中,但是由于其概念比较抽象,所以比较难理解.这篇文章主要从最小二乘法的推导导出投影矩阵,并且应用SVD分解,写出常用的几种投影矩阵的形式. 问题的提出 已知有 ...
- eclipse导入jar包连接mysql
Eclipse中导入 mysql--conncetor --java--jars 方法一:在工程项上右击,点Build Path->Configure Build Path-->Libr ...
- PHP基于单例模式编写PDO类的方法
一.单例模式简介 简单的说,一个对象(在学习设计模式之前,需要比较了解面向对象思想)只负责一个特定的任务: 二.为什么要使用PHP单例模式? 1.php的应用主要在于数据库应用, 所以一个应用中会存在 ...
- C#中substring ()的用法
C#中substring ()的用法:http://www.cnblogs.com/bluespace/archive/2007/12/11/782336.html
- codeforces 631A A. Interview
A. Interview time limit per test 1 second memory limit per test 256 megabytes input standard input o ...