【发布时间】:2015-10-06 17:52:00
【问题描述】:
我要计算
(a^n % k - b^m %k)%k
但 a^n 和 b^m 可能非常大
Bigmod(bigmod(a^n)-bigmod(b^m)) ?
我曾尝试计算 bigmod(a^n) - bigmod(b^m) 然后使用 bigmod 作为减法结果然后我意识到它给出了错误回答! 有什么可以计算的吗?
#include<cstdio>
using namespace std;
template<class T>T big_mod(T n,T p,T m)
{
if(p==0)
return (T)1;
T x=big_mod(n,p/2,m);
x=(x*x)%m;
if(p&1)
x=(x*n)%m;
return x;
}
int main()
{
long long int a=37,b=26,m=10,n=20,mod=1000000008,x,y,z;
x=big_mod(a,m,mod);
y=big_mod(b,n,mod);
z=((x%mod-y%mod)%mod);
cout<<z;
}
【问题讨论】:
-
我也会感兴趣。是不是这个:golammostaeen.wordpress.com/2012/10/20/big-mod-algorithm?
-
@Nidhoegger 是的,对!
-
请显示一些代码并添加编程语言的标签。我们不会为您完成这项工作,但我们会帮助您找出错误...
-
请编辑您的问题以解释
bigmod在此上下文中的含义。 -
我猜你的模运算符会在你没想到的时候返回负数。
标签: c++ c algorithm math number-theory