本人在做一道题时,第一份龟速幂没过,第二份__int128+快速幂过了,求助有什么不一样的。
#include <iostream>
#include <cstring>
#include <vector>
#include <cmath>
#define int long long
#define mod 1000000000007
using namespace std;
int n,m;
int mul(int a,int b){
int res=0;
while(b){
if(b&1)res=(res+a)%mod;
a=(a<<1)%mod;
b>>=1;
}
return res;
}
int poww(int a,int b){
int res=1;
while(b){
if(b&1)res=mul(res,a);
a=mul(a,a);
b>>=1;
}
return res;
}
signed main(){
cin>>n>>m;
cout<<((poww(m,n)-m*poww(m-1,n-1))%mod+mod)%mod;
return 0;
}
#include <iostream>
#include <cstring>
#include <vector>
#include <cmath>
#define mod 1000000000007
#define _int __int128
using namespace std;
long long n,m;
void print(_int a){
if(a>9)
print(a/10);
putchar(a%10+'0');
}
_int poww(_int a,_int b){
_int res=1;
while(b){
if(b&1)res=res*a%mod;
a=a*a%mod;
b>>=1;
}
return res;
}
int main(){
cin>>n>>m;
print(((poww(m,n)-m*poww(m-1,n-1))%mod+mod)%mod);
return 0;
}