Codeforces 803F - Coprime Subsequences(数论)
原题链接:http://codeforces.com/contest/803/problem/F
题意:若gcd(a1, a2, a3,...,an)=1则认为这n个数是互质的。求集合a中,元素互质的集合的个数。
思路:首先知道一个大小为n的集合有2n-1个非空子集,运用容斥,对某个数,我们可以求出它作为因子出现的个数(假设为ki)。推一下式子,可以得到结果就等于:Σmiu[i]*(2i-1),其中miu[i]是莫比乌斯函数。
时间复杂度为:O(n*sqrt(max_a)),看起来似乎会超时,实际上用了不到300ms过了。
AC代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
using namespace std;
typedef long long LL;
const LL MOD=1e9+;
const int MAXN=1e5+;
int num[MAXN];
map<int, int> mp;
int miu[MAXN],primes[MAXN],tot=;
bool isPrime[MAXN];
void getMiu()
{
memset(isPrime,true,sizeof(isPrime));
miu[]=;
for(int i=;i<MAXN;i++)
{
if(isPrime[i])
{
miu[i]=-;
primes[++tot]=i;
}
for(int j=;j<=tot;j++)
{
if(i*primes[j]>=MAXN) break;
isPrime[i*primes[j]]=false;
if(i%primes[j]==)
{
miu[i*primes[j]]=;
break;
}
miu[i*primes[j]]=-miu[i];
}
}
}
LL POW[MAXN];
void getpow()
{
POW[]=;
for(int i=;i<MAXN;i++)
POW[i]=POW[i-]*%MOD;
return;
}
int main()
{
int n,a,maxx;
getMiu();
getpow();
scanf("%d", &n);
maxx=;
for(int i=;i<n;i++){
scanf("%d", &a);//cout<<'*'<<endl;
maxx=max(a, maxx);
for(int j=;j*j<=a;j++){
if(a%j==){
mp[j]++;
if(j*j!=a)
mp[a/j]++;
}
}
} LL res=;
for(int i=;i<=maxx;i++){
if(mp[i]!=){
res=(res+miu[i]*(POW[mp[i]]-))%MOD;
}
}
res=(res%MOD+MOD)%MOD;
cout<<res<<endl;
}
做过多校题HDU6053发现思路差不多,于是一发就AC了特别开心 :D
Codeforces 803F - Coprime Subsequences(数论)的更多相关文章
- Codeforces 803F Coprime Subsequences (容斥)
Link:http://codeforces.com/contest/803/problem/F 题意:给n个数字,求有多少个GCD为1的子序列. 题解:容斥!比赛时能写出来真是炒鸡开森啊! num[ ...
- CodeForces 803F Coprime Subsequences
$dp$. 记$dp[i]$表示$gcd$为$i$的倍数的子序列的方案数.然后倒着推一遍减去倍数的方案数就可以得到想要的答案了. #include <iostream> #include ...
- CodeForces - 803F: Coprime Subsequences(莫比乌斯&容斥)
Let's call a non-empty sequence of positive integers a1, a2... ak coprime if the greatest common div ...
- F. Coprime Subsequences
题目链接: F. Coprime Subsequences time limit per test 2 seconds memory limit per test 256 megabytes inpu ...
- [CodeForces - 1225C]p-binary 【数论】【二进制】
[CodeForces - 1225C]p-binary [数论][二进制] 标签: 题解 codeforces题解 数论 题目描述 Time limit 2000 ms Memory limit 5 ...
- 【codeforces 803F】Coprime Subsequences
[题目链接]:http://codeforces.com/contest/803/problem/F [题意] 给你一个序列; 问你这个序列里面有多少个子列; 且这个子列里面的所有数字互质; [题解] ...
- Codeforces 660A. Co-prime Array 最大公约数
A. Co-prime Array time limit per test 1 second memory limit per test 256 megabytes input standard in ...
- codeforces 597C C. Subsequences(dp+树状数组)
题目链接: C. Subsequences time limit per test 1 second memory limit per test 256 megabytes input standar ...
- NYOJ 1066 CO-PRIME(数论)
CO-PRIME 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描写叙述 This problem is so easy! Can you solve it? You are ...
随机推荐
- EZOJ #386 最小生成树
分析 先建出最小生成树 之后每次倍增找环即可 代码 #include<bits/stdc++.h> using namespace std; #define int long long s ...
- MAC 安装jenkins
下载地址 : https://jenkins.io/zh/download/ 由于用dmg安装包去安装jenkins,Jenkins不会用本地的用户去构建,任何创建的文件都是“jenkins”用户所有 ...
- js中return;、return true、return false的区别
一.返回控制与函数结果, 语法为:return 表达式; 语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果 二.返回控制, 无函数结果,语法为:return; 在大多数情况下,为事件 ...
- CSS学习笔记2:选择器
标签选择器 1.选择要给样式的目标标签,所以叫做标签选择器,也叫元素选择器. 2.给所有相同标签,给相同样式. <!DOCTYPE html> <html lang="en ...
- Docker 换源
近几天又折腾起 docker来了 我发现自己在拉镜像的时候,总是超时 然后百度了一下 说要换源 90sec的一个水友 推荐了我 阿里云的加速源 我看了还是免费就想试一下 讲一下过程 ...
- HTML5--sessionStorage、localStorage、manifest
sessionStroage: <!DOCTYPE html> <html lang="en"> <head> <meta charset ...
- BZOJ 3331 (Tarjan缩点+树上差分)
题面 传送门 分析 用Tarjan求出割点,对点-双连通分量(v-DCC)进行缩点,图会变成一棵树 注意v-DCC的缩点和e-DCC不同,因为一个割点可能属于多个v-DCC 设图中共有p个割点和t个v ...
- 使用再生龙对ubuntu16.04系统完全备份与还原
1.制作再生龙U盘启动 1.所需要的软件 1.clonezilla-live-2.5.5-38-amd64.iso(再生龙系统镜像) 2.UltraISO(镜像刻录软件) 3.两个空白U盘(U盘A-用 ...
- 20191108PHP数组查找练习
<?php $arr=[20,30,60]; $new=array(22,"tom"=>33); echo $arr[2]; echo $new['tom']; for ...
- 使用 Struts2 校验器校验用户注册信息的例子
转自:https://blog.csdn.net/jin2005006/article/details/53999562 基于验证框架的输入校验 一.创建一个struts2项目testValidato ...