对大整数求余数一般是在对其进行所有加减和乘运算时就求模。a mod m表示a对于m的模。
那么a^p mod m = [ a^(p-1) mod m * a ] mod m
也就是可以求 a mod m = t然后求 (t * a)mod m =t ,反复
代码如下:
#include
#include
#include
using namespace std;
int main()
{
long long int a,p,m;
while(cin>>a>>p>>m && a!=0 && p!=0 && m!=0)
{
long long int r=1,n;
for(int i=1;i<=p;i++)
{
r=(r*a)%m;
}
cout< 但是,依旧不是最好的方法
更好的用幂取模算法,若p是偶数,a^p mod m =[ a^(p/2) mod m ] ^2 mod m这可以每次把问题的规模降一倍。递归实现幂取模
#include
#include
#include
using namespace std;
long long qiuyu(long long di,long long zhi,long long mod);
int main()
{
long long a,p,m,r;
while(cin>>a>>p>>m && a!=0 && p!=0 && m!=0)
{
if(m!=1)
{
r=qiuyu(a,p,m);
cout<