卡特兰数 中南大学OJ1320

1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 5 using namespace std; 6 7 void gcd(int a,int b,int &d,int &x,int &y) 8 { 9 if(!b) 10 { 11 d=a; 12 x=1; 13 y=0; 14 } 15 else 16 { 17 gcd(b,a%b,d,y,x); 18 y-=x*(a/b); 19 } 20 } 21 22 //计算模n下a的逆元,如果不存在逆元,返回-1 23 int inv(int a,int n) 24 { 25 int d,x,y; 26 gcd(a,n,d,x,y); 27 return d==1? (x+n)%n: -1; 28 } 29 30 long long arr[10010]; 31 long long mod=1000000007; 32 33 int main() 34 { 35 int n; 36 memset(arr,0,sizeof(arr)); 37 arr[0]=1; 38 for(int i=1;i<=10000;i++) 39 { 40 arr[i]=((arr[i-1]*2*(2*i+1)%mod)*inv(i+2,mod))%mod; 41 } 42 while(scanf("%d",&n)!=EOF) 43 { 44 printf("%lld\n",arr[n-1]); 45 } 46 return 0; 47 }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步