Java欧拉函数的计算代码详解

首先介绍下欧拉函数的定义:

欧拉函数,又称为“φ函数”,表示小于等于n的正整数中有多少个与n互质。记做φ(n)。

Java中计算欧拉函数的代码如下(假设要计算的数为n):

public static int eulerFunction(int n) {
    int res = n;
    for (int i = 2; i * i <= n; i++) {
        if (n % i == 0) {
            res = res / i * (i - 1);
            while (n % i == 0) {
                n /= i;
            }
        }
    }
    if (n > 1) {
        res = res / n * (n - 1);
    }
    return res;
}

这段代码中,我们需要对n的每个质因数i进行操作,res就是最终结果,初始值为n本身,然后对于每个i:

  • 如果i是n的质因数,我们需要将res除以i,然后乘上i-1,这是因为对于每个i,该质因数与n的其他质因数都互斥,我们只需要将互斥的质因数个数乘起来即可。同时,我们需要将n变为n/i的值,因为我们已经统计了i这个质因数。
  • 如果i不是n的质因数,我们什么都不用做,继续找下一个质因数。

最后,如果n最终仍然大于1,由于n是质因数,所以直接将res除以n,然后乘上n-1即可。

示例1:计算n为10的欧拉函数,即φ(10)。

用上面的代码进行计算,得到res的初始值为10。然后我们发现2是10的一个质因数,于是执行如下操作:

res = res / 2 * (2 - 1);  // res变为5
n = 10 / 2;  // n变为5

接着我们发现3不是10的质因数,继续往下找,发现5是10的质因数,于是执行如下操作:

res = res / 5 * (5 - 1);  // res变为4
n = 5 / 5;  // n变为1

此时n已经为1了,循环结束,最终结果为4,即φ(10)=4。

示例2:计算n为21的欧拉函数,即φ(21)。

用上面的代码进行计算,得到res的初始值为21。然后我们发现2不是21的质因数,于是继续往下找,发现3是21的一个质因数,于是执行如下操作:

res = res / 3 * (3 - 1);  // res变为12
n = 21 / 3;  // n变为7

此时7不是完全平方数,继续往下找,发现7是21的一个质因数,于是执行如下操作:

res = res / 7 * (7 - 1);  // res变为6
n = 7 / 7;  // n变为1

此时n已经为1了,循环结束,最终结果为6,即φ(21)=6。

希望上面的解释能够帮到你。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java欧拉函数的计算代码详解 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • MyBatis控制台显示SQL语句的方法实现

    下面是 “MyBatis控制台显示SQL语句的方法实现” 的完整攻略: 1. 添加MyBatis配置文件 在 application.properties 或 mybatis-config.xml 文件中声明 MyBatis 显示 SQL 的配置。在 mybatis-config.xml 中的 \<configuration> 节点内添加如下配置…

    Java 2023年5月20日
    00
  • 结合Service层讲解DAO层的异常处理操作

    让我详细讲解一下“结合Service层讲解DAO层的异常处理操作”的攻略。 首先,我们需要理解DAO(Data Access Object)层的作用。DAO层的主要任务是实现数据的持久化操作,负责与数据库交互,为上层提供数据访问接口。在实现DAO层的过程中,异常处理也是至关重要的一部分。 DAO层的异常处理分为两种情况: SQL异常 SQL异常是指在数据库操…

    Java 2023年5月27日
    00
  • java中实体类和JSON对象之间相互转化

    下面我将为你详细讲解“Java中实体类和JSON对象之间相互转化”的完整攻略。 什么是实体类和JSON对象 在开始讲解如何相互转化之前,我们先来了解一下什么是实体类和JSON对象。 实体类 实体类是指与现实中的某个对象或概念有相对应关系的类。在Java中,实体类通常有成员变量和对应的getter/setter方法,用于描述某个具体的实体对象。 JSON对象 …

    Java 2023年5月26日
    00
  • Spring Boot实现热部署的五种方式

    Spring Boot是一个快速开发框架,可以帮助开发人员快速构建Web应用程序。在开发过程中,经常需要修改代码并重新编译,这会浪费很多时间。为了提高开发效率,Spring Boot提供了热部署功能,可以在不重启应用程序的情况下实时更新代码。本文将介绍Spring Boot实现热部署的五种方式,并提供两个示例。 方式一:使用Spring Boot DevTo…

    Java 2023年5月15日
    00
  • SpringBoot之webflux全面解析

    Spring Boot WebFlux是Spring Boot的一个重要特性,它提供了一种基于响应式编程模型的Web开发方式。以下是Spring Boot WebFlux的完整攻略: 添加WebFlux依赖 在Spring Boot中,我们可以使用Maven或Gradle来添加WebFlux依赖。以下是一个Maven的示例: <dependency&g…

    Java 2023年5月15日
    00
  • Java中Http连接的两种方式(小结)

    下面详细讲解Java中Http连接的两种方式。 Http连接的两种方式 在Java中,常用的Http连接方式有两种:URLConnection和HttpClient。下面分别介绍两种方式。 使用URLConnection Java中的URLConnection类是一个用于HTTP网络操作的基本类。 发送GET请求 发送GET请求需要三个步骤: 创建一个URL…

    Java 2023年5月26日
    00
  • 详解spring-data-jpa中jpql的投影查询

    下面是详解spring-data-jpa中jpql的投影查询的完整攻略: 1. 简介 在Spring Data JPA中,JPQL是常用的查询语言。JPQL是对象查询语言,它不仅支持基本查询,还支持复杂查询和投影查询。 投影查询是指只选取符合条件的列,而不查询整个实体。这样可以提高查询效率和减少传输的数据量。下面将介绍如何在Spring Data JPA中使…

    Java 2023年5月20日
    00
  • mybatis-plus 如何操作json字段

    mybatis-plus 支持操作 JSON 数据类型,官方文档也提供了详细的使用说明,下面我来具体讲解如何操作 JSON 字段的完整攻略,包括如何插入、修改、查询和删除 JSON 数据。 1. 插入 JSON 数据 插入 JSON 数据可以使用 MyBatis-Plus 提供的 com.baomidou.mybatisplus.extension.hand…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部