我正在进行一个(对我来说非常复杂的)任务,需要计算给定n个线段时可能的最大序列数。
我发现该序列可由Catalan数表示,并且我已经成功地将其用于n≤32。我得到的结果应该模1.000.000.007计算。我的问题是,“q”和“p”对于长长的整数来说太大了,我不能在除以“q”和“p”之前就对1.000.000.007取模,因为这会得到不同的结果。
我的问题是,是否有一种非常有效的方法来解决我的问题,还是我必须考虑以不同的方式存储这些值?
我的限制如下: - 仅使用stdio.h/iostream - 仅使用整数 - n ≤ 20,000,000 - n ≥ 2
我发现该序列可由Catalan数表示,并且我已经成功地将其用于n≤32。我得到的结果应该模1.000.000.007计算。我的问题是,“q”和“p”对于长长的整数来说太大了,我不能在除以“q”和“p”之前就对1.000.000.007取模,因为这会得到不同的结果。
我的问题是,是否有一种非常有效的方法来解决我的问题,还是我必须考虑以不同的方式存储这些值?
我的限制如下: - 仅使用stdio.h/iostream - 仅使用整数 - n ≤ 20,000,000 - n ≥ 2
#include <stdio.h>
long long cat(long long l, long long m, long long n);
int main(){
long long n = 0;
long long val;
scanf("%lld", &n);
val = cat(1, 1, n / 2);
printf("%lld", (val));
return 0;
}
long long cat(long long q, long long p, long long n){
if (n == 0) {
return (q / p) % 1000000007;
}
else {
q *= 4 * n - 2;
}
p *= (n + 1);
return cat(q, p, n - 1);
}