一定要加上(long long)
#include<iostream>
const long long mod=1e+9+7;
using namespace std;
int fun(int n,int m)
{
int sum=1;
while(m)
{
if(m&1)sum=(long long)sum*n%mod;
n=(long long)n*n%mod;
m>>=1;
}
return sum;
}
//int fun(int a,int b)//求a的b次方(需要用到快速幂算法)
//{
// int ans=1;
//
// while(b)
// {
// if(b&1)
// ans=(long long)ans*a%mod;
// a=(long long)a*a%mod;
// b>>=1;
// }
// return ans;
//}
int main()
{
int n,m;
cin>>n>>m;
cout<<fun(n,m)<<endl;
return 0;
}
注意,如果是这样的话是错误的:
#include<iostream>
const long long mod=1e+9+7;
using namespace std;
long long fun(int n,int m)
{
long long sum=1;
while(m)
{
if(m&1)sum=sum*n%mod;
n=n*n%mod;
m>>=1;
}
return sum;
}
//int fun(int a,int b)//求a的b次方(需要用到快速幂算法)
//{
// int ans=1;
//
// while(b)
// {
// if(b&1)
// ans=(long long)ans*a%mod;
// a=(long long)a*a%mod;
// b>>=1;
// }
// return ans;
//}
int main()
{
int n,m;
cin>>n>>m;
cout<<fun(n,m)<<endl;
return 0;
}
然而要是加上(long long)就又可以了,所以说这个才是最关键的
#include<iostream>
const long long mod=1e+9+7;
using namespace std;
long long fun(int n,int m)
{
long long sum=1;
while(m)
{
if(m&1)sum=(long long)sum*n%mod;
n=(long long)n*n%mod;
m>>=1;
}
return sum;
}
//int fun(int a,int b)//求a的b次方(需要用到快速幂算法)
//{
// int ans=1;
//
// while(b)
// {
// if(b&1)
// ans=(long long)ans*a%mod;
// a=(long long)a*a%mod;
// b>>=1;
// }
// return ans;
//}
int main()
{
int n,m;
cin>>n>>m;
cout<<fun(n,m)<<endl;
return 0;
}