链接:https://ac.nowcoder.com/acm/problem/15705
来源:牛客网
在三维空间中,平面 x = 0, y = 0, z = 0,以及平面 x + y + z = K 围成了一个三棱锥。 整天与整数打交道的小明希望知道这个三棱锥内、上整点的数目。 他觉得数量可能很多,所以答案需要对给定的 M 取模。
输入描述:
输入有 1 ≤ T ≤ 105 组数据。每组数据中,输入两个整数 0 ≤ K ≤ 109 + 7, 1 ≤ M ≤ 109 + 7,意义如题目描述。
输出描述:
对于每组数据,输出一个整数,为三棱锥内、上整点的数目对 M 取模。
示例1
输入
复制
4
0 60
1 60
29 60
29 100007
输出
复制
1
4
40
4960
这里可以推出公(k+1)(k+2)(k+3)/6;
但是我们不知道所取的余数是不是分子的倍数,所以用一般的同余定理会导致0的出现。
所以这里采取(a/b)%c=(a%bc)/b的方法。即对mod乘以6,这里有坑。
#include <iostream>
#define ll long long
using namespace std;
int main()
{
ll n,k,mod;
cin>>n;
for(int i = 0; i < n; i++)
{
cin>> k >> mod;
mod *= 6;
ll ans = ((k + 1) * (k + 2)% mod * (k + 3) % mod ) % mod;
cout<< ans <<endl;
}
return 0;
}