首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有按照Fermat的小定理得到预期输出

没有按照Fermat的小定理得到预期输出
EN

Stack Overflow用户
提问于 2020-11-10 05:37:59
回答 1查看 92关注 0票数 1

根据Fermat的小定理,一个数的模乘逆如下所示

代码语言:javascript
复制
 a^(m-2) mod m if a and m are co-prime.

但我不会在下面的计划中得到预期的产出。在程序上哪一步是错误的?

代码语言:javascript
复制
 int pow_mod(int base,int pow,int MOD){
     long long int res = 1;
     while(pow){
       if(pow%2){
          res = (res*base)%MOD;
          pow--;
       }else{
          base = (base*base)%MOD;
          pow/=2;
       }
   }
   return res;
}
int main() {
   int mod = 100000007;
   cout<<(33 * pow_mod(11,mod-2,mod) ) %mod<<"\n";
    cout<<(33 / 11 ) %mod;

   return 0;
}

The Actual output : 
 
19692016
3

根据Fermat定理,在这两种情况下都应该是3。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-10 05:53:47

碱基=(碱*碱)%MOD;

上面所有的操作数都是int,所以计算是用整数进行的。但是(假设32位整数)产品base * base最终会在循环期间溢出int范围。

下面的强制转换是强制计算使用long long int并生成正确结果的一种方法。

碱基=(基*(长长int)基)% MOD;

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64763456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档