次方求模

复制代码
复制代码
 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cmath>
 4 using namesapace std;
 5 
 6 int main()
 7 {
 8       int a,b,c;
 9       cin>>a>>b>>c;
10       int ans;
11       ans=pow(a,b)%c;
12       return 0;      
13 }
复制代码

 

简单的次方求模很简单,就像上文一样。

不过比较难的就是大数的次方求余。

对于a^b mod c .令N=a^b.

所以 N mod c =(N1 mod c * N2 mod c * N2 mod N3 * ~~~Nn mod c ) mod c .

有了这个式子,所以:

a^b=a^(b/2) * a^(b/2) .(采用二分法比较简单)

有两种代码的形式:

递归:

复制代码
复制代码
 1 //求a^b%c 
 2 
 3 int Powmod(int a,int b)//b为指数 
 4 {
 5     if(b == 1)
 6     {
 7         return a % c;
 8     }
 9     int temp;
10     temp = Powmod(a, b/2);//递归
11     int ans = (temp * temp) % c;
12     if(b % 2 == 1)//如果指数b并不能被2整除 
13     {
14         ans = (ans * a) % c;
15     }
16     return ans;
17 }
复制代码

有时候递归会耗时,但也有用whlie循环的:

复制代码
复制代码
 1 int Powmod(int a,int b)
 2 {
 3     int ans = 1;
 4     while(b > 0)
 5     {
 6         if(b % 2 == 1)
 7         {
 8             ans = (ans * a) % c;
 9         }
10         p /= 2;
11         a = (a * a) % c;
12     }
13     return  ans;
14 }
复制代码

 

posted @   ouyang_wsgwz  阅读(575)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开