时间:2021-05-02
一、快速幂
其实就是求(a^b)% p ,(其中a,b,p都比较大在int范围内)这类问题。
首先要知道取余的公式: (a*b)%p=(a%p*b%p)%p 。
那么幂不就是乘机的累积吗,由此给出代码:
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 int fast(int a,int b,int p) { long long a1=a,t=1; while(b>0) { if(b&1) /如果幂b是奇数多乘一次,因为后边会除2变偶数,(7/2=3) t=(t%p)*(a1%p)%p; a1=(a1%p)*(a1%p)%p; b/=2; } return (int)(t%p); }二、大数取模
它的原理就是这个取余公式: (a+b)%p=(a%p+b%p)%p;
那么大数可以看做每一位的那位数字乘以自身的权然后每位相加。
如:12345678=(1*10000000)+(2*1000000)+…+8。
代码如下:
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 char s[200]; #define mod 10000010; int main() { while(gets(s)) { int k=strlen(s),sum=0; for(int i=0;i<k;i++) sum=(sum*10+s[i]-'0')%mod; /当然要是担心sum还可能溢出,那就对里边再拆开来取余 cout<<sum<<endl; } }三、总结
以上就是本文的全部内容,希望对大家的学习和工作能有所帮助。如果有疑问可以留言交流。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例汇总了C语言实现的快速幂取模算法,是比较常见的算法。分享给大家供大家参考之用。具体如下:首先,所谓的快速幂,实际上是快速幂取模的缩写,简单的说,就是快速
快速幂取模算法的引入是从大数的小数取模的朴素算法的局限性所提出的,在朴素的方法中我们计算一个数比如5^1003%31是非常消耗我们的计算资源的,在整个计算过程中
本次项目目标:使用C++完成对于大数的相关运算,具体有加减乘除取模。项目要点1.大数指的是远超longlongint的数据2.将大数用矩阵进行存储,并通过矩阵实
C++实现大数乘法算法代码复制代码代码如下://大数乘法算法#include#include#includeusingnamespacestd;intmain(
分别使用C++中的运算符重载的方法来实现大数之间的数学运算,包括加法、减法、乘法、除法、n次方、取模、大小比较、赋值以及输入流、输出流的重载。。并且使用这个大数