一个数的N次方,再对某数求余,有比较好的方法知道余数的吗

来源:百度知道 编辑:UC知道 时间:2024/06/08 15:18:46
例如:2374859的3029382次方对36123求余,余数为13195
试了一下,X的Y次方数值貌似超过了DOUBLE的范围

那样算会不会太慢了啊~~我OJ上作题~~
原题在http://acm.whu.edu.cn/oak/problem/problem.jsp?problem_id=1302
我自己的程序老是超时

2374859的3029382次方。。这个毫无疑问的,肯定会溢出了。
你可以这样,先用2374859对36123求余,再平方,再求余,再立方……这样一直做下去(如果你学过离散数学,就知道原理了)。
肯定的是,不会溢出。当然程序难度就上升了一点,不过相信你,没问题的,呵呵。

函数名: pow
功 能: 指数函数(x的y次方)
用 法: double pow(double x, double y);

求余就用%就可以

用离散的思维做就不会溢出 我只写循环的程序 函数 变量的声明 就免了哈
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;

//用离散的方法求
#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;
}