题意:
题解:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#define rep(i,j,k) for(int i=(int)j;i<=(int)k;i++)
#define per(i,j,k) for(int i=(int)j;i>=(int)k;i--)
using namespace std;
typedef long long LL;
typedef double db;
int n,P;
inline int S1(int x){
return (x*1ll*(x+1)/2)%P;
}
inline int S2(int x){
int x1=x;
int x2=x+1;
int x3=2*x+1;
if(x1%2==0)x1/=2;else x2/=2;
if(x1%3==0)x1/=3;
else if(x2%3==0)x2/=3;
else x3/=3;
return (x1*1ll*x2%P)*1ll*x3%P;
}
void Main(){
int ans=0;
int ans2=0;
int pre1,pre2;
pre1=pre2=0;
for(int i=1;i<=n;i++){
int j=n/(n/i);
int ss2=S2(j);
int ss1=S1(j);
ans2=(ans2+(ss2+P-pre2)*1ll*(n/i))%P;
ans=(ans+S1(n/i)*1ll*(ss1+P-pre1))%P;
pre1=ss1;
pre2=ss2;
i=j;
}
printf("%d\n",(ans2+P-ans)%P);
}
int main(){
freopen("phy.in","r",stdin);
freopen("phy.out","w",stdout);
int T;scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&P);
Main();
}
return 0;
}