卡特兰数 Catalan number

简介:卡特兰数又称卡塔兰数,英文名Catalan number,是组合数学中一个常出现在各种计数问题中出现的数列。以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)的名字来命名,其前几项为(从第零项开始) : 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 24466267020, 91482563640, 343059613650, 1289904147324, 4861946401452, ...

前三十位卡特兰数
[1,1,2,5,14,42,132,429,1430,4862,16796,58786,
 208012,742900,2674440,9694845,35357670,129644790,
 477638700,1767263190,6564120420,24466267020,
 91482563640,343059613650,1289904147324,
 4861946401452,18367353072152,69533550916004,
 263747951750360,1002242216651368,3814986502092304]

公式:

 

https://baike.baidu.com/item/卡特兰数/6125746?fr=aladdin

应用:

更多应用:https://blog.csdn.net/wookaikaiko/article/details/81105031     https://blog.csdn.net/w1304636468/article/details/89948819

HDOJ 4828

度度熊最近很喜欢玩游戏。这一天他在纸上画了一个2行N列的长方形格子。他想把1到2N这些数依次放进去,但是为了使格子看起来优美,他想找到使每行每列都递增的方案。不过画了很久,他发现方案数实在是太多了。度度熊想知道,有多少种放数字的方法能满足上面的条件?

Input

  第一行为数据组数T(1<=T<=100000)。
  然后T行,每行为一个数N(1<=N<=1000000)表示长方形的大小。

Output

  对于每组数据,输出符合题意的方案数。由于数字可能非常大,你只需要把最后的结果对1000000007取模即可。

Sample Input

2
1
3

Sample Output

Case #1:
1
Case #2:
5

#include <cstdio>
#include <cstring>
using namespace std;
typedef long long LL;
const int MAXN = 1000000;
LL base = 1E9 + 7;
LL ans[MAXN+5];
//计算 ax+by=gcd(a,b),返回gcd值,求出xy  
LL Ex_gcd(LL a, LL b, LL &x, LL &y)
{
	LL d;
	if (a == 0 && b == 0) 
		return -1;// 无GCD  
	if (b == 0)
	{
		x = 1;
		y = 0;
		return a;
	}
	d = Ex_gcd(b, a%b, y, x);
	y -= a / b * x;
	return d;
}

//求a关于模n的逆元,不存在返回-1  
LL Mod_reverse(LL a, LL n)
{
	LL x, y, d;
	d = Ex_gcd(a, n, x, y);
	if (d == 1)
		return (x % n + n) % n;
	else
		return -1;
}

void work()
{
	LL i, inv;
	memset(ans,0,sizeof(ans));
	ans[1] = 1;
	for (i = 2; i <= MAXN; i++)
	{
		inv = Mod_reverse(i + 1, base);
		ans[i] = (4 * i - 2) * ans[i - 1] % base;
		ans[i] = ans[i] * inv % base;
	}
}

int main()
{
	int i, n, T;
	scanf("%d",&T);
	work();
	for (i = 1; i <= T; i++)
	{
		scanf("%d",&n);
		printf("Case #%d:\n",i);
		printf("%I64d\n",ans[n]);
	}
	return 0;
}
发布了87 篇原创文章 · 获赞 56 · 访问量 9153

猜你喜欢

转载自blog.csdn.net/Ven21959/article/details/100583876