基本的容斥原理
没有任何一个划分 => 枚举至少有哪些划分
有 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;
}