一个数的N次方,再对某数求余,有比较好的方法知道余数的吗
发布网友
发布时间:2022-05-30 20:34
我来回答
共5个回答
热心网友
时间:2023-11-13 23:58
2374859的3029382次方。。这个毫无疑问的,肯定会溢出了。
你可以这样,先用2374859对36123求余,再平方,再求余,再立方……这样一直做下去(如果你学过离散数学,就知道原理了)。
肯定的是,不会溢出。当然程序难度就上升了一点,不过相信你,没问题的,呵呵。
热心网友
时间:2023-11-13 23:59
函数名: pow
功 能: 指数函数(x的y次方)
用 法: double pow(double x, double y);
求余就用%就可以
热心网友
时间:2023-11-13 23:59
//用离散的方法求
#include <iostream.h>
void main(){
int y=3029382;
int x=2374859;
int z=36123;
int result0=y%z; //第一次求余后的结果
int result=y%z;
for(int i=1;i<3029382;i++)
{
result*=result0;
result%=z;
}
cout<<result;
}
热心网友
时间:2023-11-14 00:00
/**
* 求一个数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;
}
}
热心网友
时间:2023-11-14 00:00
用离散的思维做就不会溢出 我只写循环的程序 函数 变量的声明 就免了哈
long int x=2374859;
long int y=36123;
long int sum;
sum=x%y;
for(long int i=1;i<3029382;i++)
{ sum=sum%y;
sum=sum*sum;
sum=sum%y;
sum=sum*sum*sum;
}
return sum;
endl;