题目链接
给你一个长为的的序列,让你求出两种关系各个有多少可能;
,由于互不是子集,且交集为空。我们可以这样考虑:先对进行分析,假定中有个元素,因为空集是所有集合的子集,所以显然必不能不取且不能取满个,那么当有个元素时,就有
种取值方案。
那么剩下的个数字就要留给,显然集合中必然有元素,假定中有个元素,所以在当前情况下有
种取值.
那么综上所述,第一个问题的答案就有.
然后就是大力化简这个式子了。
先考虑,由组合数的基本公式可知,那么;
那么上式可化简为
易知。
在考虑左半部分,由二项式定理可知
那么左半部分可化简为
即原式可化简为,由于无序,所以除二即为第一部分最后答案。
第二部分:要求有交集,那么我们可以先设交集的长度为,那么剩下的部分就是个站一些不空且不相交的部分,那么显然答案就是
.
化简和上面一样,多用几次二项式定理就行了。
化简出来就是,同样答案除以2即可。
#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mp make_pair
#define pb push_back
using namespace std;
LL gcd(LL a,LL b){return b?gcd(b,a%b):a;}
LL lcm(LL a,LL b){return a/gcd(a,b)*b;}
LL powmod(LL a,LL b,LL MOD){LL ans=1;while(b){if(b%2)ans=ans*a%MOD;a=a*a%MOD;b/=2;}return ans;}
const int N = 2e5 +11;
const int mod=100000007;
LL Inv[N],Fac[N];
void P(){
Fac[0]=1;
for(int i=1;i<N;i++)Fac[i]=Fac[i-1]*i%mod;
Inv[N-1]=powmod(Fac[N-1],mod-2,mod);
for(int i=N-2;i>=0;i--)Inv[i]=Inv[i+1]*(i+1)%mod;
}
LL get(int l,int r){
return Fac[l]*Inv[r]%mod*Inv[l-r]%mod;
}
LL n;
int main(){
ios::sync_with_stdio(false);
// P();
int t;
for(cin>>t;t;t--){
cin>>n;
cout<<(powmod(3,n,mod)-powmod(2,n+1,mod)%mod+1+2*mod)%mod*powmod(2,mod-2,mod)%mod<<' ';
cout<<(powmod(4,n,mod)-powmod(3,n+1,mod)-1+3*powmod(2,n,mod)%mod+2*mod)%mod*powmod(2,mod-2,mod)%mod<<endl;
}
return 0;
}