Pair
Pair

基本的容斥原理
没有任何一个划分 => 枚举至少有哪些划分
有 n-1 个限制,限制是x=2…n 不是一个合法的划分位置,枚举一些强制违反的限制即可

#include<bits/stdc++.h>
#define mod 1000000000
#define ll long long
using namespace std;
ll n,u,xx,v,g[700][700],a[1000000];
int main ()
{
 cin>>n;
 a[0]=1;
 for (ll i=1; i<=500; i++) a[i]=(a[i-1]*2)%mod;
 for (ll i=1; i<=n; i++)
     for (ll j=i+1; j<=n; j++) 
      for (ll x=i; x<=j; x++)
    for (ll y=x+1; y<=j; y++)
     if (__gcd(x,y)==1) g[i][j]++;
 for (ll i=0; i<(1<<(n-1)); i++)
 {
     xx=u=1;
     for (ll j=1; j<n; j++)
   if (i&(1<<(j-1)))
   {
    u=(u*a[g[xx][j]])%mod;
    xx=j+1;
   }
     u=(u*a[g[xx][n]])%mod;
     if (__builtin_popcount(i)%2==1) v=(v-u)%mod;
  else v=(v+u)%mod;
    }
    cout<<(v+mod)%mod;
}

相关文章:

  • 2022-02-01
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-17
  • 2022-02-14
  • 2021-08-14
猜你喜欢
  • 2021-12-10
  • 2021-12-04
  • 2021-08-14
  • 2021-07-12
  • 2021-05-20
  • 2021-05-21
相关资源
相似解决方案