解析:
最后推出来的公式就是∑(1,k+1)(i*i+i)/2;
这里还有一个重要的平方和公式就是Σi^2=(i)*(i+1)*(2*i+1)/6
这个公式化简出来就是(k+1)*(k+2)*(k+3)/6,这里尽量化成乘积式,不要展开
不然的话会对取模产生影响
这里有很多种方法,一种使用__int128≈3e38
另一种是用取模的性质,
(a/b)%m=(a%(m*b))/b
当然用java也可以过
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef unsigned long long ull;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
ull k,m;
scanf("%llu%llu",&k,&m);
__int128 p1;
__int128 n=k;
__int128 six=6;
__int128 ele=11;
p1=(n*n*n+six*n*n+ele*n+six)/six;
p1=p1%m;
printf("%llu\n",p1);
}
return 0;
}
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef unsigned long long ull;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
ull k,m;
scanf("%llu%llu",&k,&m);
ull p1;
m=m*6;
p1=(k+1)%m*(k+2)%m*(k+3)%m;
p1=p1/6;
printf("%llu\n",p1);
}
return 0;
}