Codeforces 803F - Coprime Subsequences(数论)
2024-08-26 09:55:50
原题链接: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
最新文章
- C#开发微信门户及应用(22)-微信小店的开发和使用
- 再探JS数组原生方法—没想到你是这样的数组
- 用原生javascript实现在页面动态显示时间
- C语言运算符优先级 详细列表
- 解决svn working copy locked问题
- LabVIEW串口通信
- python常用sql语句
- ios 7.1.2 拍照声音
- CodeForces 454C Little Pony and Expected Maximum
- JSONP与JSON的关系
- Servlet编码和解码
- rotatelogs分割apache日志文件
- Linux(Centos)中tcpdump参数用法详解(转)
- Python并发编程协程(Coroutine)之Gevent
- 201521123048 《Java程序设计》第2周学习总结
- height:auto 火狐没边框
- [Android] Android 支持下拉刷新、上拉加载更多 的 XRecyclerview
- 学习Makefile
- visual studio 2017 创建 android 本地共享库(.so) 并从 C# android 项目中调用
- oracle查询查询出某字段为空后前台不显示的小测试1
热门文章
- [LeetCode] 72. Edit Distance(最短编辑距离)
- JavaScript搜索框响应事件
- C# 栈=>;随时读取栈中最小值
- CentOS7通过SpeedTest工具测速
- 中标麒麟V6.0安装 mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
- seaborn教程3——数据集的分布可视化
- P3773 [CTSC2017]吉夫特
- 【接口工具】接口抓包工具之Charles
- MapReduce数据格式化------<;一>;
- 【问题解决方案】git中的文件的重命名