模数为平方的大数

时间:2016-06-09 20:01:27

标签: c++ modular-arithmetic

我有很多我想要剩下的。例如300 ^ 31。当我尝试使用a=pow(b,x)%d;运算符时,它说我不能在双精度上使用它,因为它只适用于整数。这个计算有什么功能吗?

我尝试使用{{1}}

2 个答案:

答案 0 :(得分:1)

如果bxd符合整数,则可以使用

int expoModulo(int b, int x, int d) {
    int a = 1;
    for(int i=0; i<x; i++) {
        a = (a*b)%d;
    }
    return a;
}

答案 1 :(得分:0)

我认为在尝试取幂时更好地采用余数。您可以使用Big Modulo Algorithm。它会帮助你避免大数字。之后你可以使用long long而不是double。

我尝试在代码块16.01(codeblocks-16.01mingw-setup.exe)中编写此代码并且它运行良好(我的代码与链接代码略有不同,但它具有相同的概念):

#include<iostream>
using namespace std;

int bmod = 33;

int bigmod(long long int x,long long int b){ // x^b
    int ans=1;
    while(b){
        if(b%2)ans=((long long)ans*x)%bmod;
        b=b>>1;
        x=((long long)x*x)%bmod;
    }
    return ans;}

int main(){
    cout<<bigmod(300,31);
}