Educational Codeforces Round 20 F. Coprime Subsequences(容斥)
2017-05-03 19:41
447 查看
原题链接:http://codeforces.com/contest/803/problem/F
题解:
f[i]表示最大公约数为i的子序列的个数,我们可以求出所有公约数为i的倍数的子序列的个数,然后从后向前扫,对于每一个i,减去公约数为ki的(k>=2)的子序列的个数,最后可以得到答案。注意处理空集的情况。
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e5+5;
const int MOD=1e9+7;
typedef long long ll;
ll f[MAXN],sv[MAXN],po[MAXN];
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int n,mx=0;
scanf("%d",&n);
po[0]=1;
for(int i=1;i<MAXN;i++)
{
po[i]=(po[i-1]*2)%MOD;
}
for(int i=1;i<=n;i++)
{
int x;
scanf("%d",&x);
sv[x]++;
}
for(int i=1;i<MAXN;i++)
{
f[i]=1;
for(int j=i;j<MAXN;j+=i)
{
f[i]=(f[i]*po[sv[j]])%MOD;
}
f[i]-=1;
}
for(int i=MAXN-1;i>=1;i--)
{
for(int j=i+i;j<MAXN;j+=i)
{
f[i]=(f[i]-f[j]+MOD)%MOD;
}
}
printf("%lld\n",f[1]);
return 0;
}
题解:
f[i]表示最大公约数为i的子序列的个数,我们可以求出所有公约数为i的倍数的子序列的个数,然后从后向前扫,对于每一个i,减去公约数为ki的(k>=2)的子序列的个数,最后可以得到答案。注意处理空集的情况。
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e5+5;
const int MOD=1e9+7;
typedef long long ll;
ll f[MAXN],sv[MAXN],po[MAXN];
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int n,mx=0;
scanf("%d",&n);
po[0]=1;
for(int i=1;i<MAXN;i++)
{
po[i]=(po[i-1]*2)%MOD;
}
for(int i=1;i<=n;i++)
{
int x;
scanf("%d",&x);
sv[x]++;
}
for(int i=1;i<MAXN;i++)
{
f[i]=1;
for(int j=i;j<MAXN;j+=i)
{
f[i]=(f[i]*po[sv[j]])%MOD;
}
f[i]-=1;
}
for(int i=MAXN-1;i>=1;i--)
{
for(int j=i+i;j<MAXN;j+=i)
{
f[i]=(f[i]-f[j]+MOD)%MOD;
}
}
printf("%lld\n",f[1]);
return 0;
}
相关文章推荐
- Educational Codeforces Round 20 F. Coprime Subsequences(莫比乌斯反演)
- Educational Codeforces Round 20 A
- Educational Codeforces Round 20总结
- Educational Codeforces Round 20 C 数学/贪心/构造
- Educational Codeforces Round 20 C 数学
- Educational Codeforces Round 20 B
- Educational Codeforces Round 11 A. Co-prime Array 水题
- 【Educational Codeforces Round 3 B】【水题 基本容斥】The Best Gift n本书任选两个不能同一类型的方案数
- Educational Codeforces Round 20-C. Maximal GCD
- [Updating] Educational Codeforces Round 20 解题报告
- Educational Codeforces Round 20 Distances to Zero
- Educational Codeforces Round 20 A - Maximal Binary Matrix
- Educational Codeforces Round 20 C
- Educational Codeforces Round 20 B - Distances to Zero
- cf Educational Codeforces Round 20 E. Roma and Poker
- Educational Codeforces Round 11——A. Co-prime Array(map+vector)
- codefoces Educational Codeforces Round 20
- Educational Codeforces Round 20 G. Periodic RMQ Problem(线段树动态开点)
- Educational Codeforces Round 20 C(math)
- Educational Codeforces Round 20 G. Periodic RMQ Problem(线段树+主席树)