/**
* 求一个数m的n次方对另一个数b的余数
*/
public class Mode {
public static void main(String[] args) {
int x = fn2(10, 8, 7);
System.out.println(x);
}
/***
求m的n次方对b的余数
f(n) = m^n%b
= (m*m^(n-1))%b
= (m%b*(m^(n-1)%b))%b
= (m%b*(f(n-1))%b)%b
转化为递归算法,此算法会造成内存溢出
fn2 优化,从1开始算,改成循环算法
*/
public static int fn(int m,int n,int b){
if(n == 1){
return m%b;
}
return (m%b*fn(m, n-1, b)%b)%b;
}
public static int fn2(int m,int n,int b){
int s = m%b;
for(int i=2;i<=n;i++){
s = (m%b*s)%b;
}
return s;
}
}
求一个数m的n次方对另一个数b的余数
最新推荐文章于 2022-10-09 16:50:29 发布