我正在尝试计算大数的下面的表达式。模块化算术的优化代码
由于该表达式的值将是非常大的,我只需要这个表达式的值模量的一些素数。假设这个表达式的值是x
,我选择素数1000000007
;我在寻找x % 1000000007
。
这是我的代码。
#include<iostream>
#define MOD 1000000007
using namespace std;
int main()
{
unsigned long long A[1001];
A[2]=2;
for(int i=4;i<=1000;i+=2)
{
A[i]=((4*A[i-2])/i)%MOD;
A[i]=(A[i]*(i-1))%MOD;
while(1)
{
int N;
cin>>N;
cout<<A[N];
}
}
但是,即使这么多的优化失败了N的大值。例如,如果N是50,正确的输出是605552882
,但是这给了我132924730
。如何进一步优化以获得正确的输出?
注意:我只考虑N为偶数。
按答案它看起来像有没有什么可以做,以提高该code.I'll尝试使用一些其他的公式来代替。 – g4ur4v
[快速计算n!的方法! mod m其中m是素数?](http://stackoverflow.com/questions/9727962/fast-way-to-calculate-n-mod-m-where-m-is-prime)。此外,这是一个更好的适合,但没有答案:[如何计算nCk%P的大素数和非常大的N?](http://stackoverflow.com/questions/14475139) –