C++之同余定理

C++之同余定理同余定理 一 同余定理的定义 二 同余定理的定理符号定义定理一 三 同余定理相关定理欧拉函数推论 费马小定理 相关例题 一 同余定理的定义数论中的重要概念 给定一个正整数 m 如果两个整数 a 和 b 满足 a b 能够被 m 整除 即 a b m 得到一个整数 那么就称整数 a 与 b 对模 m 同余 记作 a b modm 对模 m 同余是整数的一个等价关系 证明略 二 同余定理的定理符号两个整数 a b 若

(一)同余定理的定义

数论中的重要概念。给定一个正整数m,如果两个整数a和b满足a-b能够被m整除,即(a-b)/m得到一个整数,那么就称整数a与b对模m同余,记作a≡b(mod m)。对模m同余是整数的一个等价关系。(证明略)

(二)同余定理的定理

符号

 两个整数a、b,若它们除以整数m所得的余数相等,则称a与b对于模m同余或a同余于b模m。 记作:a≡b (mod m), 读作:a同余于b模m,或读作a与b对模m同余,例如 26≡2(mod 12)。 

定义

定理一:

8.幂运算:如果a ≡ b (mod m),那么a^n ≡ b^n (mod m)

9.若a ≡ b (mod m),n|m,则 a ≡ b (mod n)

(三)同余定理相关定理

定义1 如果m为自然数,集合Kr={x|x=mt+r,t是任意整数},r=0,1,…,m

则称K0,K1,…,Km-1为模m的剩余类。

例如,模2的剩余类是偶数类与奇数类;模3的剩余类是:K0={…,-6,-3,0,3,6,…},K1={…,-5,-2,1,4,7,…},K2={…,-4,-1,2,5,8…}。

剩余类具有如下列比较明显的性质:

1)模m的剩余类K0,K1,……,Km-1都是整数的非空子集;

2)每个整数必属于且只属于一个剩余类;

3)两个整数属于同一个剩余类的充要条件是它们对模m同余。

定义2 从模m的每个剩余类中任取一个数,所得到的m个数叫做模m的完全剩余系。

对模m来说,它的完全剩余系是很多的,经常采用的是:

0,1,2,…,m-1;

1,2,3,…,m;

-(m-1)/2,…,-1,0,1,…,m/2 (m为奇数),

-m/2+1,…,-1,0,1,…,m/2 (m为偶数),

-m/2,…,-1,0,1,…,m/2-1 (m为偶数).

定理1 k个整数a1,a2,…,ak构成模m的完全剩余系的充要条件是k=m,且这m个数对模m两两不同余。

定理2 若x1,x2,…,xm 是模m的完全剩余系,(a,m)=1,b为整数,则ax1+b,ax2+b,…,axm+b也是模m的完全剩余系。

欧拉函数

定义1 在模m的完全剩余系中,所有与m互素的数叫做模m的简化剩余系。例如1,3,7,9是模10的一个简化剩余系。

定义2 若对任意的自然数m,用记号ф(m)表示0,1,2,…,m-1中与m互素的数的个数,则称ф(m)为欧拉函数。

例如ф(10)=4,ф(7)=6,ф(1)=1。

定理1 k个整数a1,a2,…,ak构成模m简化剩余系的充要条件是k=ф(m),(ai,m)=1,i=1,2,…, ф(m),且这ф(m)个数对模m两两不同余。

定理2 若(a,m)=1,x1,x2,…,xф(m)是模m的简化剩余系,则ax1,ax2,…,axф(m)也是模m的简化剩余系。

定理3(欧拉定理) 若(a,m)=1,则aф(m) ≡1 (mod m)

证 设x1,x2,…,xф(m)是模m的简化剩余系,根据定理2,ax1,ax2,…,axф(m)也是模m的简化剩余系。

由此可知x1,x2,…,xф(m)中任一个数必与ax1,ax2,…,axф(m)中某一个数对模m同余;反之ax1,ax2,…,axф(m)中任一个数必与x1,x2,…,xф(m)中某一个数对模m同余,这就有:

ax1ax2…axф(m)≡x1x2…xф(m) (mod m),又(x1x2…xф(m),m)=1,所以aф(m) ≡1 (mod m)。

例1 已知x=h是使ax≡1 (mod m)中成立的最小正整数,求证h|ф(m)。

证 由ah-1=mt(t为整数)可知(a,m)=1,于是

aф(m) ≡1 (mod m)。

令ф(m)=hq+r,0<=r

代入上面的同余式,可得 ar ≡1 (mod m),所以r=0,故h|ф(m)。

推论(费马小定理)

若p是素数,则

1) 当(a,p)=1时,ap-1 ≡1 (mod p);

2) ap ≡a (mod p)

证 先证1)。由p是素数,知0,1,2,…,p-1中有p-1个数与p互素,于是ф§=p-1。又因为(a,p)=1,所以根据定理3得证1)。

再证2)。当(a,p)=1时,由1)知2)成立;当(a,p)不等于1时,p|a,余数同为0,2)也成立。

欧拉在1760年证明了定理3,故称为欧拉定理。费马在1640年提出了上面的推论,它的证明是欧拉在1736年完成的,这个推论通常叫做费马小定理。

例2 设a为整数,求证a5≡a(mod 30).

证 由于30=2.3.5,而依据费马小定理,有

a5≡a(mod 5) (1)

a3≡a(mod 3) (2)

a2≡a(mod 2) (3)

由(2)得 a5≡a3≡a(mod 3) (4)

由(3)得a5≡a4≡a2≡a(mod 2) (5)

于是由(1).(4),(5),并且2,3,5两两互素,所以 a5≡a(mod 30).

定理4 若p是素数,则ф(pa)=pa-pa-1。 (ф(pa)的计算公式)

证 考虑模pa的完全剩余系0,1,2,…,p,…,2p,…,pa-1 (1)

(1)式中与pa不互素的数只有p的倍数0,p,2p,…,(pa-1–1)p,这共有p a-1个,于是(1)中与pa互素的数有pa-p a-1个,所以ф(pa)=pa-pa-1。

定理5 若(m,n)=1,则ф(mn)=ф(m)ф(n)。

推论 若正整数m1,m2,…mk两两互素,则ф(m1m2…mk)=ф(m1)ф(m2)…ф(mk).

定理6 若m的标准分解式为m=p1a1p2a2…pkak,

则ф(m)=p1a1-1p2a2-1…pkak-1(p1-1)(p2-1)…(pk-1).

例3 设(n,10)=1,求证n101与n的末三位数相同。

证:为了证明n101-n≡0只要证明n100≡1(mod 1000).

事实上由(n,125)=1,φ(125)= φ(53)=53-5^2=100,有n100≡1(mod 125);

再由n是奇数知8|n2-1,进而n100≡1(mod 8),而(125,8)=1,得证。

相关例题

例1 证明:正整数a是9的倍数必须且只须a的各位数码之和是9的倍数。

证 设a=an.10n+an-1.10n-1+…+a0

由10≡1 (mod 9)得10k≡1(mod 9),k=0,1,2,…,n,

所以 ak.10k≡ak (mod 9), k=0,1,2,…,n。

所以a≡a0+a1+…+an (mod 9)

因此 9|a的充要条件是 9| a0+a1+…+an 。

例2 设a=anan-1…a1a0,求11|a的充要条件。

解由10≡-1 (mod 11),得10k≡(-1)k (mod 11), k=0,1,2,…,n

而 a≡a0-a1+a2-…+(-1)nan (mod 11)

因此 11|a的充要条件是11| a0-a1+a2-…+(-1)nan.

例3 求正整数a能被7整除的条件。

解 由于 1000≡-1 (mod 7),从而1000k≡(-1)k (mod 7), k=0,1,2,…,n,

于是设a= anan-1…a1a0 (1000) 这就有a≡a0-a1+a2-…+(-1)nan (mod 7)

因此 7|a的充要条件是a0-a1+a2-…+(-1)nan ≡0 (mod 7) 这里的ai为三位数(一千进制).

如当a=时,由于579-234+101-89=357≡0 (mod 7),所以7|a。

应用例如:

可以通过同余的性质换算成

因为 5 mod 3 = 2

所以 2 与 5 是同余,表示成 5^101 mod 3 ≡ 2^101 mod 3

又因为 101 mod 3 = 2

所以 101 与 3 是同余,表示成 2^101 mod 3 ≡ 2^2 mod 3

(到这里可能大家都不理解,简单解释就是在底数相同时,指数变化 后在 去 mod 3,其实是个循环)

5^1 mod 3 = 2

5^2 mod 3 = 1

5^3 mod 3 = 2

5^4 mod 3 = 1

…………

所以在底数相同时可以对指数进行同余

所以上面这个问题 可以表示成 5^101 mod 3 ≡ 2^2 mod 3 = 1

方法二:

5^101 mod 3

因为 5 mod 3 = 2

所以 2 与 5 是同余

因为 5 与 5 是同余

通过同余式相乘( 若a≡b(mod m),c≡d(mod m),则ac≡bd(mod m) )

2 ≡ 5 (mod 3),5 ≡ 5 (mod 3)

可以表示成

2 * 5 mod 3 ≡ 5 * 5 mod 3 = 1

1 * 5 mod 3 ≡ 2 * 5 * 5 mod 3 = 2

2 * 5 mod 3 ≡ 1 * 5 * 5 mod 3 = 1

…………

依次类推所以可以用程序循环表示:

int a = 5, pow = 101, m = 3, result = 1;

(a + b) mod m = (a mod m + b mod m) mod m (a * b) mod m = ((a mod m) * (b mod m)) mod m 

2、高精度取模:

12345 = ( ( (1 * 10 +2 ) * 10 +3 ) * 10 + 4 ) * 10 + 5) 这就可以用同余加减法表示了 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/210927.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午11:35
下一篇 2026年3月18日 下午11:35


相关推荐

  • 微信小程序+php 授权登陆,完整代码

    微信小程序+php 授权登陆,完整代码先上图实现流程:1、授权登陆按钮和正文信息放到了同一个页面,未授权的时候显示登陆按钮,已授权的时候隐藏登陆按钮,显示正文信息,当然也可以授权和正文分开成两个页面,在授权页面的onload里判断是否

    2022年7月3日
    28
  • 构建下一代智能体系统:基于 MCP、A2A 与 Agentic AI 的协议栈全景与实践指南

    构建下一代智能体系统:基于 MCP、A2A 与 Agentic AI 的协议栈全景与实践指南

    2026年3月15日
    3
  • java clone()_java throwable

    java clone()_java throwable克隆是一种基本的编程模式。事实上,Java在很多方面可能实现得很差,但这丝毫没有减少克隆的必要性。而且,很容易实现克隆,无论你希望它如何工作,浅层的,深层的,混合的,无论什么。如果愿意的话,甚至可以为函数使用clone名称,而不实现Cloneable。假设我有类A、B和C,其中B和C是从A派生的。如果我有一个A类型的对象列表,如下所示:ArrayListlist1;ArrayListlist2…

    2022年10月10日
    8
  • Git客户端的安装

    Git客户端的安装1 概述 Git 有自带的命名行客户端 也有自己的图形化客户端 这个就是 git exe 此外还有 TortoiseGit 在这之上又封装了一层 使我们用起来更加的方便 这个跟 TortoiseSVN 就很像了 所有 TortoiseGit 的运行需要基于 git exe 2Git exe 的安装 1 下载安装包 下载地址 https gitforwindow org 2 安装 其中有这个选项 默认即可 其他默认即可 3 安装完成后 在文件夹中 右键会有如下选项 第一组 注意 后面一组是 To

    2026年3月18日
    2
  • 上行速率和下行速率

    上行速率和下行速率上行速率和下行速率今天读 计算机网路自顶向下方法 时看到两个名词上行速率和下行速率百度一查才知道上行是指本地向服务器传输数据的速度 下行是指从服务器下载数据的速度 下行都是根据宽带大小决定的 上行一般都差不多 用大白话说就是 上行速率 就是文件的上传速度 下行速率 就是文件的下载速度 此外我们常说几 M 的带宽和我们实际使用过程中的下载速度是不同的 因为运行商的计算单位是 bit 而我们

    2026年3月26日
    3
  • ORACLE 字符串替换函数 REPLACE()

    ORACLE 字符串替换函数 REPLACE()REPLACE 用法 replace 原字段 原字段旧内容 原字段新内容 例如 SELECTREPLAC abcde a NULL ASstrFROMdua bcde

    2026年3月26日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号