我的代码包含
之类的语句ans =((ans % mod)*(n % mod)) % mod;
和
inverse= findMMI_fermat(n,mod);
ans =((ans % mod)*(inverse % mod)) % mod;
findMMI_fermat定义为:
ull fast_pow(ull base,ull n,ull M) //ull is unsigned long long
{
if(n==0)
return 1;
if(n==1)
return base;
ull halfn=fast_pow(base,n/2,M);
if(n%2==0)
return ( halfn * halfn ) % M;
else
return ( ( ( halfn * halfn ) % M ) * base ) % M;
}
ull findMMI_fermat(ull n,ull M)
{
return fast_pow(n,M-2,M);
}
所有变量都声明为unsigned long long。该程序运行正常,直到ans,mod和n的大小都增长到10 ^ 18的数量级。我知道我不能直接乘以这么大的数字,我知道将整数转换为字符串然后乘以它们的方法。但还有其他更简单的方法吗?
答案 0 :(得分:0)
不,没有。另一种方法也需要工作。但是,不使用字符串。它使用字节数组或整数数组或long long。
但是,它完全符合字符串的工作原理。
语言,因为Java有一个内置的大数字库。我不记得这样的c ++库。