加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

大数取模

发布时间:2020-12-14 03:35:08 所属栏目:大数据 来源:网络整理
导读:(A*B)%C=(A%C*B%C)%C 1.(A*B)%C 将B转化成二进制形式,--A(2^0+2^1.....)%C--A%C+2A%C+4A%C...... ps:B超出int表示范围时,转化成二进制,用数组表示 //二分法求(A*B)%Ctypedef unsigned _int64 llong;llong Modle(llong a,llong b,llong c){llong d=0;whil

(A*B)%C=(A%C*B%C)%C

1.(A*B)%C

将B转化成二进制形式,-->A(2^0+2^1.....)%C-->A%C+2A%C+4A%C......

ps:B超出int表示范围时,转化成二进制,用数组表示

//二分法求(A*B)%C
typedef unsigned _int64 llong;
llong Modle(llong a,llong b,llong c)
{
llong d=0;
while(b)
{
if(b&1) d=(d+a)%c;
a=(a+a)%c;
b>>=1;
}
return  d;
}


2.A^B%C

一般来说,类似上题,用二分法:

int mod_exp(int a,int b,int c)
{
int d=1;
while(b)
{
if(b&1) d=(d*a)%c;
a=(a*a)%c;
b>>=1;
}
return d;}
以二进制的方式:

int mod_exp(int a,int c)
{
a%=c;
int i=0,d=1,bi[30];
while(b&&i<30)
{
bi[i++]=b%2;
b=b/2;
}
for(;i>=0;i--)
{
d=(d*d)%c;
if(b[i]==1) d=(d*a)%c;
}
return d;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读