取模加法的结果

👁️ 1 人浏览 💬 0 人评论 ❤️ 添加收藏

运行下面这段程序:

本节模型:madd / mmul / msub 模意义下加乘减(先取模防溢出、减法 +p 防负),fact_mod(n, p) 边乘边取模求 n!。

#include <iostream>
#include <string>
#include <vector>
using namespace std;

long long madd(long long a, long long b, long long p) {
    // 模意义下的加法:先各取模再相加取模
    return (a % p + b % p) % p;
}

long long mmul(long long a, long long b, long long p) {
    // 模意义下的乘法(a、b 都小于 p 约 1e9 时,乘积放得进 long long)
    return (a % p) * (b % p) % p;
}

long long msub(long long a, long long b, long long p) {
    // 模意义下的减法:+p 再取模,保证结果非负
    return (a % p - b % p + p) % p;
}

long long fact_mod(int n, long long p) {
    // n! mod p:边乘边取模
    long long r = 1;
    for (int i = 1; i <= n; i++) {
        r = mmul(r, i, p);
    }
    return r;
}

int main() {
    cout << madd(1000000000, 7, 1000000007) << endl;
}

(本题用 g++ -std=c++17 -O0 编译。)

提交你的答案
请登录后提交答案。
去登录
代码编辑器
Ctrl + Enter 运行
本次输入:
输出:

                        
👩‍🏫
AI
💬 题目评论

全部评论