博客
关于我
codeforces803F 2100分容斥原理 + 莫比乌斯函数
阅读量:284 次
发布时间:2019-03-03

本文共 1460 字,大约阅读时间需要 4 分钟。

题意:

给你 \dpi{150}n 个数的序列 \dpi{150}a ,问你 gcd = 1 的子序列方案数。

数据范围: 1 \leqslant n \;,\; a_i \leqslant 10^5 。

题解:

ans = cal(num[1]) - \sum cal(num[p]) + \sum cal(num[k])

p 的质因子个数是奇数个,且没有相同的质因子。

\dpi{150} k 的质因子个数是偶数个,且没有相同的质因子。

num[i] 表示序列中 i 的倍数的个数。

cal(x) 表示 x 个数形成的非空集合的个数。

这就是莫比乌斯函数。

感受:

关键是分析本质不同的质因子。

代码:

#include
using namespace std;typedef long long ll ;const int maxn = 1e5 + 5 ;const ll mod = 1e9 + 7 ;int n , cnt[maxn] , num[maxn] ;bool vis[maxn] ;int prime[maxn] ;int mu[maxn] ;void get_mu(){ int up = 1e5 ; int cnt = 0 ; mu[1] = 1 ; for(int i = 2 ; i <= up ; i ++) { if(!vis[i]) prime[++ cnt] = i , mu[i] = -1 ; for(int j = 1 ; j <= cnt && prime[j] * i <= up ; j ++) { vis[prime[j] * i] = 1 ; if(i % prime[j] == 0) break ; else mu[i * prime[j]] = -mu[i] ; } }}void init(){ int up = 1e5 ; num[1] = n ; for(int i = 2 ; i <= up ; i ++) for(int j = i ; j <= up ; j += i) num[i] += cnt[j] ;}ll qpow(ll a , ll b){ ll ans = 1 ; a %= mod ; while(b) { if(b & 1) ans = (ans * a) % mod ; b >>= 1 , a = (a * a) % mod ; } return ans % mod ;}ll cal(int x){ ll ans = 0 ; ans = qpow(2ll , ll(x)) ; ans = (ans - 1 + mod) % mod ; return ans ;}void solve(){ int up = 1e5 ; ll ans = cal(num[1]) ; for(int i = 2 ; i <= 1e5 ; i ++) { ans += ll(mu[i]) * cal(num[i]) ; ans %= mod ; } ans = (ans + mod) % mod ; printf("%lld\n" , ans) ;}int main(){ scanf("%d" , &n) ; memset(cnt , 0 , sizeof(cnt)) ; memset(num , 0 , sizeof(num)) ; for(int i = 1 ; i <= n ; i ++) { int x ; scanf("%d" , &x) ; cnt[x] ++ ; } get_mu() ; init() ; solve() ; return 0 ;}

 

转载地址:http://afml.baihongyu.com/

你可能感兴趣的文章
asp.net 4.5 练习~test14-5 写文件
查看>>
asp.net 4.5 练习~test14-6 streamwrite写文件
查看>>
asp.net 4.5 练习~test14-8
查看>>
asp.net 4.5 练习~test15-1 xml文件使用xslt转换格式
查看>>
asp.net代码练习 work006 Application[]和Session[]的区别
查看>>
asp.net代码练习 work007 ViewState[]的使用
查看>>
asp.net代码练习 work014 ClientScript属性
查看>>
asp.net代码练习 work015 回调技术
查看>>
asp.net代码练习 work016 fileupload文件上传
查看>>
asp.net代码练习 work021 DataReader的使用
查看>>
JavaScript基础-form表单验证
查看>>
PHP基础-变量的作用范围
查看>>
PHP基础-类的静态变量的读取
查看>>
PHP7.0--如何使用函数的引用
查看>>
天干地支年份算法的猜想(虾米大王)
查看>>
Java基础--01--数据类型/方法/数组
查看>>
【JokerのZYNQ7020】LINUX_EMIO_LED。
查看>>
【JokerのZYNQ7020】LINUX_EMIO_BUTTON。
查看>>
python中的json注意事项
查看>>
base64编码的学习和理解
查看>>