幂取模求怎么错了。。
#include<iostream> //幂取模 a^n mod m
#include<conio.h>
/* a,n,m 大的情况 */
using namespace std;
int getmod( int a,int n,int m ) //分治算法
{
int x=getmod(a,n/2,m);
long long ans=((long long )x*x)%m;
if(n%2==1) ans=ans*a%m;
return (int )ans;
}
int main()
{
int a,n,m;
scanf("%d%d%d",&a,&n,&m);
int x=getmod( a, n, m );
printf("%d\n",x);
system("pause");return 0;
}
[解决办法]
递归算法必须要设置好递归出口。你的代码里没有出口,会导致无限递归。
int getmod( int a,int n,int m ) //分治算法 { if (n==0) /* 递归出口条件 */ return 1; int x=getmod(a,n/2,m); long long ans=((long long )x*x)%m; if(n%2==1) ans=ans*a%m; return (int )ans;}