[HZNUOJ] 第七章pro E【C系列7.13】她的思考
题意:问 C n m C_n^m Cnm是否为奇数
方法一 结论题:若 n A N D m = m n AND m=m nANDm=m,则答案为奇数
#include <bits/stdc++.h>
using namespace std;
#define int long long int
#define Paddi ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
signed main()
{
Paddi;
int T;
cin >> T;
while (T--)
{
int n, k;
cin >> k >> n;
if ((n & k) == k)
cout << 1 << endl;
else
cout << 0 << endl;
}
}
方法二:
卢卡斯定理
C
n
m
(
m
o
d
p
)
=
C
⌊
n
p
⌋
⌊
m
p
⌋
C
n
m
o
d
p
m
m
o
d
p
(
m
o
d
p
)
C_n^m \pmod p =C_{\lfloor{{n\over p} \rfloor}}^{\lfloor{{m\over p} \rfloor}} C_{n \mod p}^{m \mod p} \pmod p
Cnm(modp)=C⌊pn⌋⌊pm⌋Cnmodpmmodp(modp)
代码:
#include<iostream>
using namespace std;
int v(int n,int m)
{
if(m<n)
{
return 0;
}
else if(n==0||n==m)
{
return 1;
}
else
{
return v(n-1,m-1)+v(n-1,m);
}
}
long long int com(long long int n,long long int m)
{
if(m==0)
{
return 1;
}
else
{
return (com(n/2,m/2)* v(n%2,m%2))%2;
}
}
int main()
{
int T;
cin>>T;
while(T--)
{
long long int n,m;
cin>>n>>m;
cout<<com(n,m)<<"\n";
}
return 0;
}