模运算的一些性质

模运算核心性质与算法应用:从数学原理到编程实践 在算法设计与数论问题中,模运算(Modulo Operation)是处理大数、周期性问题和哈希计算的重要工具。本文从数学性质和编程实践两方面系统归纳模运算的核心知识,帮助读者在算法题中正确应用模运算 阅读详情

引入

今天无聊刷水题的时候发现自己对于模运算的一些性质知之甚少,故写了这篇文章来总结一下一些模运算的定理和性质;

例题

水题;这道题如果用暴力+前缀和解法是这样的(会TLE):

    int n;
    cin >> n;
    vector<int> s(n + 1);
    for (int i = 1; i <= n; i++)
        cin >> s[i], s[i] = s[i - 1] + s[i];
    int res = 0;
    for (int i = 1; i <= n; i++)
        for (int j = i; j <= n; j++)
            if ((s[j] - s[i - 1]) % 7 == 0)
                res = max(res, j - i + 1);
    cout << res;

但是其实这道题用到了一个性质:若a≡b(mod c) 则 (a−b)≡0(mod c),反过来同理;那怎么用这一个性质呢? 我们可以找第一个模等于k和最后一个模等于k的数,两个数的下标相减就是最长的区间啦 ;

完整代码如下(有注释):

// web:https://www.luogu.com.cn/problem/P3131
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
typedef pair<ll, ll> PLL;
const int N = 5e4 + 10;
const int INF = 1e9;
const ll INFL = 1e18;

int s[N], first[7], last[7];
signed main()
{
    ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    int n;
    cin >> n;
    // 这个地方不直接mod会爆int!!-->具体证明看下文;
    for (int i = 1; i <= n; i++)
        cin >> s[i], s[i] = (s[i - 1] + s[i]) % 7;
    // 从大到小遍历一遍数组,这样就可以找到下标最小的mod 7为k的数了;
    for (int i = n; i >= 1; i--)
        first[s[i]] = i;
    // 这个地方因为[1, r]的前缀和 mod 7等于0了, 所以这里就是就是选择[1, r]上的所有数, 长度就是r;
    first[0] = 0;
    // 同上,这里只不过找到下表最大的mod 7为k的数;
    for (int i = 1; i <= n; i++)
        last[s[i]] = i;
    int res = -1;
    // 前缀和的定义:s[l, r] = s[r] - s[l - 1];
    for (int i = 0; i <= 6; i++)
        res = max(res, last[i] - first[i]);
    cout << res;
    return 0;
}

一些开箱即用的性质

  1. (a + b) % p = (a % p + b % p) % p = (a % p + b) % p = (a + b % p) % p
  2. (减法就是加一个数的相反数,和加法基本相同,不做赘述)
  3. (a * b) % p = (a % p * b % p) % p = (a * b % p) % p = (a % p * b) % p1
  4. 若a≡b (% p)则(a + c) ≡ (b + c) (%p)和(a * c) ≡ (b * c) (%p)
  5. 若a≡b (% p),c≡d (% p),则 (a + c) ≡ (b + d) (%p),(a - c) ≡ (b - d) (%p),(a * c) ≡ (b * d) (%p),(a / c) ≡ (b / d) (%p)

这些性质的证明基本上遵循以下方法:
令 a = p * k1 + r1, b = p * k2 + r2 ,并将a和b带入式子中,即可得出;
例如证明(a + b) % p = (a % p + b) % p,将式子带入,左边 = (p * (k1 + k2) + (r1 + r2)) mod p = (r1 + r2) mod p;右边 = (p * k2 + (r1 + r2)) mod p = (r1 + r2) mod p;所以代码中的在求前缀和的同时求mod的操作是成立的;

模运算性质及其证明 有的时候数字a太大,题目会要求对m取模(a=a%m), 从而使得a<m. 如果 a%mb%m 则a和b对m同余。记为 a=b(mod m) ab(mod m) 等价于 (a-b) 0(mod m) if ac(mod m), bd(mod m) then 性质一a+b c+d (mod m) 性质二 a-b c-d (mod m) ... 阅读详情

相关推荐

别再乱用标签了!深度解析Unity Addressables标签(Labels)的三种高级用法与性能影响

本文深度解析Unity Addressables标签(Labels)的三种高级用法与性能影响,包括标签组合查询、Pack Together by Label打包策略及运行时性能优化。通过实战代码示例和性能数据对比,帮助开发者实现精细化资源加载控制与包体优化,提升项目效率。

weixin_30500105的博客 508

使用模运算解决的问题

1、模运算概述 给定一个正整数p,和任意一个整数n,一定存在等式n=k*p + r。其中k、r是整数,并且满足0=r n除以p的商,r为n除以p的余数,可以把这个式子转换为模运算的形式,r = (n mod p)。例如:20 = 3*6 + 2,转换后为2 = (20 mod 6)。 模运算有如下性质: ①若p|(a-b)(意思是p能整除(a-b)),则a≡b (mod p

heart_love的博客 2016

【SystemVerilog笔记(一)】数据类型

(一)内建数据类型 1.按照四值逻辑和二值逻辑分类 四值逻辑类型:integer、logic、reg、wire等线网类型 二值逻辑类型:byte、shortint、int、longint、bit 2.按照有符号和无符号分类 有符号类型:byte、shortint、int、longint、integer 无符号类型:bit、logic、reg、wire等线网类型 ※记忆:按位定义的变量是无符号的。 (二)软件常用类型 1.定宽数组 在这里插入代码片 ...

cc__cc__的博客 1万+

【数论】模运算 模板及其正确性复杂度证明

\(a \cdot x = b \pmod n\) 线性同余方程 题解 法1.n,a互质时使用逆元,否则两边除掉gcd(a,x)然后逆元。(如果b除不尽及无解) 法2.化为\(a \cdot x + n \cdot k = b\) 扩展欧几里得 线性同余方程组 中国剩余定理 板题测试:51nod1079 题意 \[ \begin{align} a &\equiv a_...

Vincent19999999的博客 1163

配置 NVIDIA RTX 5090 + sm_120 + flashattention,已跑通一个大模型 ~~

本文介绍了在Ubuntu 22.04系统下为NVIDIA RTX 50系显卡搭建深度学习环境的完整流程。重点包括:1)安装适配50系显卡(sm_120架构)的CUDA 12.9驱动和Toolkit,需注意禁用系统自带驱动;2)配置环境变量解决nvcc命令识别问题;3)通过源码编译方式安装支持sm_120的PyTorch nightly版本(cu129),解决官方二进制包不兼容问题。整个过程涉及显卡驱动安装、CUDA环境配置、PyTorch适配等关键步骤,并提供了详细的验证方法和常见问题解决方案。文中特别强调

qq_36674060的博客 6156

《YOLOv8实例分割实战:训练自己的数据集 》(视频课程)

本课程将手把手地教大家使用labelme标注和使用YOLOv8训练自己的数据集,完成一个多目标实例分割实战项目。

bai666ai的博客 790

模运算的基本性质

函数行为描述数学表示floor向负无穷方向取整(返回 ≤ 原数的最大整数)trunc向零方向取整(直接截断小数部分)

2301_80361697的博客 1620

【学习笔记】无人机(UAV)在3GPP系统中的增强支持(四)-无人机系统(UAS)命令与控制(C2)通信用例

UTM向5G网络提供无人机系统C2通信所需的信息,例如服务类别、无人机系统服务的流量类型、授权的无人机系统服务所需的QoS以及无人机系统服务的订阅。遵循模型B的网络辅助C2模型,为了确保UAS操作的C2通信的服务可用性和可靠性,特别是当无人机在操作员的视线之外(BLOS)飞行时,为无人机提供支持冗余的C2通信链路。如果需要创建额外的C2通信连接或更改现有数据连接的配置以进行C2通信,则5G网络会根据无人机系统的授权服务信息和C2通信中所需的QoS和优先级,修改或分配一个或多个C2通信流量的QoS流。

u011376987的博客 2051

模运算及其性质

本文以c++语言为载体,对基本的模运算应用进行了分析和程序设计,以理论和实际相结合的方法向大家介绍模运算的基本应用。。 原文:https://blog.youkuaiyun.com/cckit/article/details/41629263 基本理论 一、基本概念   1、给定一个正整数p,任意一个整数n,一定存在等式 n = kp + r ;   2、其中k、r是整数,且 0 ≤ r &lt...

Curtis’Blog 6826

读懂 403 Forbidden, the request has been blocked by UCON.:它不是浏览器渲染问题,而是后端安全闸门在拦截

摘要 403 Forbidden 错误表明服务器理解请求但拒绝执行,通常与权限或访问控制有关。当错误信息显示 "blocked by UCON" 时,说明请求被 SAP 体系中的统一连接管控框架拦截。UCON 采用白名单机制限制外部调用,通过记录、评估、强制三阶段流程实施管控。常见触发场景包括 HTTP 服务与通信场景配置不一致、白名单未更新等。排查时应通过 DevTools 确认服务器响应,使用 curl 排除浏览器干扰,并比较不同环境的行为差异。解决方案通常涉及调整配置传输顺序或更新

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 239

HLA分型

HLA分型 一、根据WES的tumor数据进行数据分型 选用hlahd 软件安装及使用 [root@18605fd8771e ~]# wget https://jaist.dl.sourceforge.net/project/bowtie-bio/bowtie2/2.4.1/bowtie2-2.4.1-linux-x86_64.zip [root@18605fd8771e ~]# unzip bowtie2-2.4.1-linux-x86_64.zip && mv bowtie2-2.4.1

qq_23435961的博客 2487

模运算的概念和性质

模运算的概念和性质

aggresss 1万+

vLLM专题(七)-支持的模型列表

vLLM支持跨多种任务的生成式和池化模型。如果一个模型支持多个任务,您可以通过–task参数来设置任务。对于每个任务,我们列出了已在vLLM中实现的模型架构。每个架构旁边,我们列出了一些使用该架构的流行模型。

1259

取模运算性质_取模运算的性质

对于整型数a,b来说,取模运算或者求余运算的方法都是:1.求 整数商: c = a/b;2.计算模或者余数: r = a - c*b.求模运算和求余运算在第一步不同: 取余运算在取c的值时,向0 方向舍入(fix()函数);而取模运算在计算c的值时,向负无穷方向舍入(floor()函数)。例如:计算-7 Mod 4那么:a = -7;b = 4;第一步:求整数商c,如进行求模运算c = -2(向负...

weixin_29955355的博客 2617

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

取模运算性质_模运算的基本性质

基本理论基本概念给定一个正整数p,任意一个整数n,一定存在等式n=kp+r;其中k、r是整数,且0≤r对于正整数p和整数a,b,定义如下运算:取模运算:a%p(或amodp),表示a除以p的余数。模p加法:(a+b)%p,其结果是a+b算术和除以p的余数,也就是说,(a+b)=kp+r,则(a+b)%p=r。模p减法:(a - b)%p...

weixin_30263409的博客 888

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

数论-模运算与同余的性质

数论-模运算与同余的性质 模运算 基础 取模运算:a % p(a mod p),表示a除以p的余数。 运算 1.模p加法:(a + b) % p = (a%p + b%p) % p 2.模p减法:(a - b) % p = (a%p - b%p) % p 3.模p乘法:(a * b) % p = ((a % p)*(b % p)) % p 4.幂模p :(a^b) % p = ((a % p)^b...

ACM_Algorithm 5704

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

取模运算性质_取模运算的性质、扩展欧几里德定理

取模运算对于整型数a,b来说,取模运算或者求余运算的方法都是:1.求 整数商: c = a/b;2.计算模或者余数: r = a - c*b.求模运算和求余运算在第一步不同: 取余运算在取c的值时,向0 方向舍入(fix()函数);而取模运算在计算c的值时,向负无穷方向舍入(floor()函数)。例如:计算-7 Mod 4那么:a = -7;b = 4;第一步:求整数商c,如进行求模运算c = -...

weixin_30794381的博客 902

取模运算的性质

定义 给定一个正整数p,任意一个整数n,一定存在等式 : n = kp + r ; 其中 k、r 是整数,且 0 ≤ r 对于正整数 p 和整数 a,b,定义如下运算: 取模运算:a % p(或a mod p),表示a除以p的余数。 模p加法: ,其结果是a+b算术和除以p的余数。 模p减法: ,其结果是a-b算术差除以p的余数。 模p乘法: ,其

varinic 的博客 2万+

取模运算性质_【转】数学与编程——求余、取模运算及其性质

一、求余运算(Remainder)Euclidean division:Given two integers a and b, with b ≠ 0, there exist unique integers q and r such that a = bq + r and 0 ≤ r < |b|, where |b| denotes the absolute value of b.(术语:...

weixin_35051143的博客 571

初等数论—模运算的性质

一、对于超大数据的处理要求,题目要求保留末几位-初等数论-模运算的性质。二、对于超大数据的处理要求,题目要求完整输出 —高精度算法。long long —10^18数量级。int ——10^9数量级。

2401_85061293的博客 261

模运算(Modular Arithmetic)的性质

加、减、乘运算与取模操作可交换。这意味着你可以在运算过程中任何步骤进行取模,而不会影响最终结果的正确性。这使得它成为处理大数计算、构造加密算法和检验数字规律的强大工具。运算性质条件加法/减法a±bmodmamodm±bmodmmodma±bmodm[(amodm±bmodm)]modm无条件乘法a×bmodmamodm×bmodmmodma×bmodm[(a。

your_father_zyz的博客 2493
上一篇: 最长上升子序列解法及其优化
下一篇: 01背包变种之完全装满问题
ResCells
博客等级 码龄4年 191粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值