ハッハッハ新年を教えてもいい
今年は、あまりにも退廃年です。。。
(良いので、負のエネルギーに満ち以降)
分析:
本当に面白い数学的な再帰は、法を見つける、問題を。。。
テストに考え抜かれ、その後、N2 ^ n型形状の圧力は考えることはできません
* 20 20は単に直接テーブル2333を打ちます。。。
M> = 2 * n-1の場合、放電がS(N、M)のためにどのように配置するので、全体の構成とその接頭辞には影響を与えないであろう。。
次に、どのように需要
その後、我々の精神(DA)光(ピョウ)(菅)フラッシュ(菅)MOD Nモードダウン、驚くほど計算が階乗ないことがわかったよりも大きいが0でなければなりません
今、あなたは40(霧のスコアを持っています
次に、正のソリューションを入力します。
S(n、m)は、もしM <= N忘れないで、無溶液用
だから、ここでm <2 * N-1の<考えるのn
まず、第1のMn元素のため、気軽な結果には影響しません置きます
最初のM-N + 1つの要素は、任意のM-N + 1つの選択肢を配置することができます
しかし、n番目の要素のために、唯一の選択肢は、MNこと
このとき、M-N + 2要素に対して、正確にM-N + 1の選択肢が存在します
しかし、n-1個の要素のこの数、唯一の選択肢は、MN
などなど。。。私たちは、再帰式に来て:
S(N、M)=(MN)!*(MN + 1)^(丸め/ 2で(IK))*(MN)^((IK)/ 2は、低級四捨五入)
激しくプッシュし、S(I、I + k)は、本質的に幾何学的配列の加算であります
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #define maxn 21 #define MOD 20000023 using namespace std; inline long long getint() { long long num=0,flag=1;char c; while((c=getchar())<'0'||c>'9')if(c=='-')flag=-1; while(c>='0'&&c<='9')num=num*10+c-48,c=getchar(); return num*flag; } int fac[MOD],sum[MOD]; long long n,K; inline void init() { fac[1]=1; for(int i=2;i<MOD;i++)fac[i]=1ll*fac[i-1]*i%MOD; for(int i=1;i<MOD;i++)sum[i]=(sum[i-1]+fac[i])%MOD; } inline long long ksm(long long num,long long k) { long long ret=1; for(;k;k>>=1,num=num*num%MOD)if(k&1)ret=ret*num%MOD; return ret; } int main() { int T=getint(); init(); while(T--) { n=getint(),K=getint(); if(n<=K+1)printf("%d\n",sum[min(n,1ll*(MOD-1))]); else if(K+1>=MOD)printf("%d\n",sum[MOD-1]); else { int k=n-K,ans=sum[K-1]; int A=1ll*K*(K+1)%MOD; int inv=ksm(A-1,MOD-2); ans=(ans+1ll*fac[K]*(ksm(A,k/2+1)-1)%MOD*inv%MOD)%MOD; ans=(ans+1ll*fac[K]*(ksm(A,(k-1)/2+1)-1)%MOD*(K+1)%MOD*inv%MOD)%MOD; printf("%d\n",ans); } } }