2021 Niu Guest Winter Holiday Algorithm Basic Training Camp 6 B-Coefficient

Question link
Insert picture description here
Insert picture description here
solution:

Because the final result is modulo 3, we can subtract 3 x 3x from the original formula3 x , becomes(x 2 − 2 x + 1) n (x^2-2x+1)^n(x22 x+1)n , and then can be simplified into:(x − 1) 2 n (x-1)^{2n}(x1)2 n ,

Then kkThe k- term coefficient isC 2 nk ∗ (− 1) 2 n − k C_{2n}^k*(-1)^{2n-k}C2 nk(1)2 n k , just discuss2 n − k 2n-k2 nThe parity of k issufficient, and themodulus of the number of combinations can be determined byLucas LucasL U C A S algorithm.

Code:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<map>
#include<stack>
#include<set>
#include<ctime>
#define iss ios::sync_with_stdio(false)
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
typedef pair<int,int>pii;
const int MAXN=1e5+5;
const int mod=1e9+7;
const int inf=0x3f3f3f;
const int p=73;
ll pow(ll a, ll b, ll m)
{
    
    
    ll ans = 1;
    a %= m;
    while(b)
    {
    
    
        if(b & 1)
            ans = (ans % m) * (a % m) % m;
        b /= 2;
        a = (a % m) * (a % m) % m;
    }
    ans %= m;
    return ans;
}
ll inv(ll x, ll p)//x关于p的逆元,p为素数
{
    
    
    return pow(x, p - 2, p);
}
ll C(ll n, ll m, ll p)//组合数C(n, m) % p
{
    
    
    if(m > n)
        return 0;
    ll up = 1, down = 1;//分子分母;
    for(int i = n - m + 1; i <= n; i++)
        up = up * i % p;
    for(int i = 1; i <= m; i++)
        down = down * i % p;
    return up * inv(down, p) % p;
}
ll Lucas(ll n, ll m, ll p)
{
    
    
    if(m == 0)
        return 1;
    return C(n % p, m % p, p) * Lucas(n / p, m / p, p) % p;
}
int main()
{
    
    
    int t;
    cin>>t;
    while(t--)
    {
    
    
        int n,k;
        cin>>n>>k;
        ll ans;
        if((2*n-k)%2==0)
        {
    
    
            ans=Lucas(2*n,k,3);
        }
        else
        {
    
    
            ans=3-Lucas(2*n,k,3);
            ans=ans%3;
        }
        printf("%lld\n",ans);
    }
}

Guess you like

Origin blog.csdn.net/weixin_45755679/article/details/114050364