实在不懂为什么测试点会出现负数……自己试的就没有问题。
#include<iostream>
#include<cmath>
using namespace std;
int main(){
long long a,b,p;cin>>a>>b>>p;
long long i = 1,ans = 0,point = 0;
while(a>0){
ans+=i%p*(a&1);
a>>=1;
i=i*2%p;
}
i = 1;
while(b>0){
point+=i%p*(b&1);
b>>=1;
i=i*2%p;
}
cout<<((ans%p)*(point%p))%p;
return 0;
}