我试图使用以下代码解决大 mod 问题。
#include<iostream>
#include<cmath>
using namespace std;
typedef long int li;
li m;
li mod(li b,li p)
{
if(p==0)
return 1;
if(p%2==0)
{
return ((mod(b,p/2)%m)*mod(b,p/2)%m)%m;
//return (li)pow(mod(b,p/2)%m,2)%m;
}
return (b%m*mod(b,p-1)%m)%m;
}
main()
{
li b,p;
while(cin>>b>>p>>m)
{
cout<<mod(b,p)<<endl;
}
}
但它为 ((mod(b,p/2)%m)*mod(b,p/2)%m)%m 和 pow(mod(b,p/2)%m,2)% 提供不同的输出我想知道它们是否不同,如果它们是不同的输出的原因。
样本输入:3 18132 17
17 1765 3
2374859 3029382 36123
不带 pow 功能的输出:13 2 13195
带 pow 功能的输出:1 2 31329
使用 pow 函数测试代码
#include<iostream>
#include<cmath>
using namespace std;
typedef long int li;
li m;
li mod(li b,li p)
{
if(p==0)
return 1;
if(p%2==0)
{
//return ((mod(b,p/2)%m)*mod(b,p/2)%m)%m;
return (li)pow(mod(b,p/2)%m,2)%m;
}
return (b%m*mod(b,p-1)%m)%m;
}
main()
{
li b,p;
while(cin>>b>>p>>m)
{
cout<<mod(b,p)<<endl;
}
}