Java 中的卡迈克尔数2025年5月13日 | 阅读 4 分钟 在本节中,我们将学习卡迈克尔数是什么,并创建Java 程序来检查给定数字是否为卡迈克尔数。卡迈克尔数程序经常出现在 Java 编码面试和学术中。 卡迈克尔数一个复合数 n,对于所有与 n 互质的整数 'a'(即 an-1≡ 1(mod n)),它都表现为伪素数,称为绝对伪素数或卡迈克尔数。 该数字必须满足卡迈克尔数的充要条件。如果 n 满足以下条件,则 n 是绝对伪素数或卡迈克尔数:
它们非常罕见。请注意,每个卡迈克尔数都是至少三个不同素数的乘积。 换句话说,我们可以说,一个复合数 n 是卡迈克尔数,当且仅当对于所有与 'n' 互质的数,我们有: an-1≡1(mod n) 让我们看看如何计算卡迈克尔数。 卡迈克尔数的例子让我们检查561是否是卡迈克尔数。 如果该数字满足上述两个条件,则意味着 561 是卡迈克尔数。
令 GCD (a, 561) = 1 断言:a560 ≡ 1 mod 561 a2≡ 1 mod 3 a10≡ 1 mod 11 a16≡ 1 mod 17 假设 'a' 与561互质。所以,a 不是 3、11 或 17 的倍数。现在,尽管 561 不是素数,但它仍然满足我们即将展示的正式定理的结论,即'a' 的 560 次幂模 561 等于 1。 现在,3、11和17是素数,因此根据费马小定理,'a' 的平方模 3 等于1,'a' 的第 10 次幂模 11 等于1,'a' 的第 16 次幂模 17 等于1。 现在我们来处理第一个同余式,'a' 的平方模 3 等于1,我们将两边都提高到相应的幂,以得出'a' 的第 80 次幂模 3 等于1。我们可以对下一个同余式做同样的事情。我们可以取'a' 的第 10 次幂模 11 等于1,并将两边都提高到 8 次幂,以计算'a' 的第 80 次幂模 11 等于1。最后,我们可以取最后一个同余式 'a' 的第 16 次幂模 17 等于1,并将两边都提高到 5 次幂,以计算'a' 的第 80 次幂模 17 等于1。 (a2)40≡ 1 mod 3 (a10)8≡ 1 mod 11 (a16)5≡ 1 mod 17 现在,我们将使用中国剩余定理(CRT) 将所有内容结合起来。 我们知道 'a' 的 80 次幂模 3、11 和 17 都等于 1。因此,我们可以得出结论,'a' 的第 80 次幂模 561 等于1。因此,根据 CRT: a80=1 mod 561 我们将在这里再执行一步,即取 'a' 的第 80 次幂同余于1 模 561。将两边都提高到 7 次幂,我们发现 'a' 的 560 次幂同余于1 模 561。因此: (a80)7=a560≡ 1 mod 561 所以,尽管561不是素数,但它仍然满足费马小定理的结论(对于任何与 n 互质的数 'a',a 的 n-1 次幂模 n 等于 1)。 前几个卡迈克尔数是561, 1105, 1729, 2465, 2821, 6601, 8911, 10585, 15841。 算法
卡迈克尔数 Java 程序CheckCarmichaelNumber.java 输出 1 Enter the Number: 10585 10585 is a Carmichael number. 输出 2 Enter the Number: 564 564 is not a Carmichael number. 下一个主题Java 中可被 k 整除的最小整数问题 |
一次性密码 (OTP) 被广泛用于保护在线交易和访问各种资源。一次性密码生成器是一种设备或软件应用程序,它生成一个仅对单个登录会话或交易有效的唯一代码。本文将教我们如何实现...
7 分钟阅读
Java 中的 this 和 super 关键字的区别 在 Java 中,`super` 和 `this` 关键字对于与类和对象交互至关重要。除了引用类成员外,它们还有助于管理继承。Java 还提供了 `this()` 和 `super()` 构造函数,它们在构造函数中使用。this 关键字...
阅读 8 分钟
多项式是代数中的基本元素,表示由变量和系数组成的表达式。多项式的导数是微积分中的一个关键概念,表示多项式值相对于其变量的变化率。计算导数在各个领域都至关重要,...
阅读 4 分钟
在拔河问题中,我们需要将给定的 n 个整数集分成两个大小相等或几乎相等的部分。给定的集合必须划分方式是使得其中整数之和的差……
5 分钟阅读
计算机科学和编程领域有许多有趣的问题,它们不仅挑战开发人员,还为高效的算法解决方案提供了见解。其中一个问题是范围加法问题,它经常在各种面试、竞争性设计竞赛和实际应用中遇到...
阅读 6 分钟
数独是一款流行的益智游戏,涉及将一个 9x9 的网格填入数字,以便每行、每列和每个 3x3 的子网格都包含 1 到 9 的所有数字。以编程方式解决数独可能具有挑战性,但多线程可以显著提高性能...
14 分钟阅读
可以使用 SimpleTimeZone 类的 setRawOffset() 函数将基本时区偏移量设置为 GMT。为了获得本地时间,将偏移量应用于 UTC。语法:public void setRawOffset(int offsetMillis) 参数:该函数唯一的参数是 offsetMillis,它给出……
阅读 3 分钟
java.text.CollationElementIterator 包含 setOffset() 方法。可以使用 CollationElementIterator 类将迭代器的光标设置为参数指定的索引。语法:public void setOffset(int newOffset) 参数:光标必须设置在该方法接受整数值的位置,...
阅读 2 分钟
Java 与 Python Java 和 Python 是当今最流行的两种编程语言。虽然两者都功能强大且得到广泛支持,但在语法、性能和用例方面存在显著差异。在本文中,我们将从特性方面比较 Java 和 Python...
阅读 4 分钟
在 Java 中,将语句打印到控制台是编程的一个基本方面。System.out 对象代表标准输出流,提供了几种方法来高效地完成此任务。在本节中,我们将探讨 Java 中用于打印的各种可用方法,以及...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India