牛客 15705 直角三棱锥 (GCD)

链接: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%b
c)/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;
}

Cu1
发布了30 篇原创文章 · 获赞 2 · 访问量 960

猜你喜欢

转载自blog.csdn.net/CUCUC1/article/details/104905553
今日推荐