大数取模
发布时间: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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |