在我短暂的体育节目生涯中,我遇到了很多时间计算数字模型,如
26164615615665561165154564545......%(10000007)
我做了一些研究,但只能找到
形式的数字模型的计算(a^b)%c
任何人都可以解释如何像第一个例子那样计算数字模型。
答案 0 :(得分:2)
C ++没有任何长整数算术工具作为标准库的一部分。 如果要使用长整数进行计算,则需要依赖外部库。
两个好的选择似乎是
以下是使用NTL如何完成模幂运算的示例(取自NTL examples):
ZZ PowerMod(const ZZ& a, const ZZ& e, const ZZ& n)
{
if (e == 0) return ZZ(1);
long k = NumBits(e);
ZZ res;
res = 1;
for (long i = k-1; i >= 0; i--) {
res = (res*res) % n;
if (bit(e, i) == 1) res = (res*a) % n;
}
if (e < 0)
return InvMod(res, n);
else
return res;
}
答案 1 :(得分:0)
我找到了解决方案(可能)
所以,这里有解释。如果我们想要计算非常大的数字的mod,不能存储为任何数据类型,而不是我们必须将数字作为字符串。我们会做类似的事情此
int remainder(string &s,first)
{
int rem=0;
for(int i=0;i<s.length();++i)
rem=rem*10+(s[i]-'0');//Explaining this below
return rem;
}
为什么会起作用?拿一张纸和一支笔,然后开始用数字首先划分字符串(取100)。
For example, for 1234 % 100.
1 mod 100 = 1
12 mod 100 =(1 * 10 + 2) mod 100 =12
123 mod 100 =(12 * 10 + 3) mod 100 =23
1234 mod 100 =(23 * 10 + 4) mod 100 =34
PS:这是我的第一个回答。我写了回答我自己的问题,但我认为这对未来的读者会有好处。