私は大きな数のために以下の式を計算しようとしています。
この式の値は非常に大きくなるため、この式のモジュラスの値が素数である必要があります。この式の値が で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を偶数と考えています。