大数字求余,数论相关
算法吧
全部回复
仅看楼主
level 2
ziedfild 楼主
最近在学RSA,这个算法经常会对一个很大的数字做求余运算。例如88^11 mod 9这种运算貌似在便携式计算器上根本没法算呀,印象中有一种迭代算法可以很简便的笔算出这种求余计算的结果,有那位大神知道,麻烦告诉我一下。
2013年04月26日 14点04分 1
level 12
快速幂,代码如下
计算a^p mod q旳值:
viod kuaisumi(int a,int p,int q)
{
int b;
a=a%q;
while(p>=1)
{
if(p%2==1)m=m*a%q;//如果是奇数次幂就
a=a*a%q;
q=q>>1;
}
return a*m%q;
}
2013年04月28日 23点04分 2
level 12
【楼上错了】
int kuaisumi(int a,int p,int q)
{
int b;
a=a%q;
while(p>=1)
{
if(p%2==1)m=m*a%q;//如果是奇数次幂就
a=a*a%q;
q=q>>1;
}
return a*m%q;
}
2013年04月28日 23点04分 3
两个不一样么。。。还有m没定义吧
2013年04月29日 01点04分
回复 香小鱼66 :靠,我明明是 int m;怎么就成了int b;?
2013年04月30日 06点04分
回复 香小鱼66 :两个的函数返回类型不一样
2013年04月30日 06点04分
m没有初始化就能运算,能讲一下你的算法吗
2013年05月05日 16点05分
level 3
在数论上,常常是用小幂来运算大幂。比如说这里的88^11.11=1+2+8.
88(mod)9=7 则 88^2(mod)9=7*7(mod)9=4 则 88^4 (mod)9=16(mod)9=7 则88^8(mod)9=4
则88^11=7*4*4(mod)9=4
2013年05月05日 16点05分 6
level 4
2013年05月06日 16点05分 7
level 4
用数学,上边有了
2013年05月29日 08点05分 8
1