返回顶部
首页 > 资讯 > 精选 >Java语言如何求解完美数
  • 220
分享到

Java语言如何求解完美数

java 2023-05-30 19:05:32 220人浏览 独家记忆
摘要

这篇文章主要介绍了Java语言如何求解完美数,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、概念首先我们理解一下,什么叫做完美数?问题描述:若一个自然数,它所有的真因子(即

这篇文章主要介绍了Java语言如何求解完美数,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

1、概念

首先我们理解一下,什么叫做完美数?

问题描述:若一个自然数,它所有的真因子(即除了自身以外的约数)的和恰好等于它本身,这种数叫做完全数。简称“完数”

例如,

  6=1+2+3
  28=1+2+4+7+14
  496=1+2+4+8+16+31+62+124+248
  8128=1+2+4+8+16+32+64+127+254+508+1016+2032+4064

按照完数的定义,其实用程序求解完数并不是太难,先求解出这个数的所有真因子,然后相加,判断是否等于它本身即可。但是,在这个数很小的时候,没有什么问题,一旦这个数字超过一定的数值,那么问题就来了,程序的执行效率就会变得低下。

我们优化程序的算法逻辑,往往会考虑一个问题,怎么高效的利用计算机的特性?在它所定义的算法中,有没有大量重复的无用功呢?沿着这样的思路去考虑这个问题,我们会很快得到另外的一种解决方案。

2、说明

2.1分析

在这里,我们会不会很容易就想到,之前我们提到过的分解因式?是的,在解决完美数的时候,我们会用到分解因式。一般来说,求解完美数会经过三个步骤:

求出一定数目的质数表

利用质数表求指定数的因式分解

利用因式分解求所有真因数和,并检查是否为完美数

2.2难点

初看之下,第一步和第二步是没什么问题的,我们在前面的两篇文章中已经探讨过了,不清楚的同学可以查看。

重点是在第三步,如何求真因数和?方法很简单,要先知道将所有真因数(有不清楚真因数概念的同学,去看看)和加上该数本身,会等于该数的两倍(有些同学不知道,现在应该也知道了吧?),例如:

2 * 28 = 1 + 2 + 4 + 7 + 14 + 28

事实上,这段等式可以转换为:(代码输入错误,我用截图好了)

Java语言如何求解完美数

发现没有?2和7都是因式分解得到的,那么,程序是不是有了简化的地方?

2.3结论

只要求出因式分解,就可以利用循环求得等式后面的值,将该值除以2就是真因数和了;等式后面第一眼看时可能想到使用等比级数公式来解,不过会使用到次方运算,可以在进行读取因式分解阵列时,同时计算出等式后面的值。

3、代码

import java.util.ArrayList; // 求解完美数 public class PerfectNumber {   // 传入一个值,求解至少多少个完美数   public static int[] lessThan(int number) {     int[] primes = Prime.findPrimes(number);      ArrayList list = new ArrayList();          for(int i = 1; i <= number; i++) {        int[] factors = factor(primes, i);        if(i == fsum(factors))          list.add(new Integer(i));     }       int[] p = new int[list.size()];     Object[] objs = list.toArray();      for(int i = 0; i < p.length; i++) {       p[i] = ((Integer) objs[i]).intValue();     }          return p;   }      // 分解因式   private static int[] factor(int[] primes, int number) {      int[] frecord = new int[number];     int k = 0;          for(int i = 0; Math.pow(primes[i], 2) <= number;) {        if(number % primes[i] == 0) {          frecord[k] = primes[i];          k++;          number /= primes[i];        }        else          i++;      }       frecord[k] = number;       return frecord;    }     // 因式求和   private static int fsum(int[] farr) {      int i, r, s, q;       i = 0;      r = 1;      s = 1;      q = 1;       while(i < farr.length) {        do {          r *= farr[i];          q += r;          i++;        } while(i < farr.length - 1 &&           farr[i-1] == farr[i]);        s *= q;        r = 1;        q = 1;      }       return s / 2;    }      public static void main(String[] args) {     int[] pn = PerfectNumber.lessThan(1000);         for(int i = 0; i < pn.length; i++) {       System.out.print(pn[i] + " ");     }          System.out.println();   } }

感谢你能够认真阅读完这篇文章,希望小编分享的“Java语言如何求解完美数”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!

--结束END--

本文标题: Java语言如何求解完美数

本文链接: https://lsjlt.com/news/220651.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java语言如何求解完美数
    这篇文章主要介绍了Java语言如何求解完美数,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、概念首先我们理解一下,什么叫做完美数?问题描述:若一个自然数,它所有的真因子(即...
    99+
    2023-05-30
    java
  • c语言怎么求完全数
    解答:c 语言求完全数的算法如下:遍历从 1 到 n-1 的所有正整数 i。如果 n 能被 i 整除,则 i 是 n 的真因子,将 i 加到 sum 中。如果 sum 等于 n,则 n ...
    99+
    2024-05-23
    c语言
  • C语言中如何求素数
    这篇文章主要讲解了“C语言中如何求素数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言中如何求素数”吧!前言素数又称质数。所谓素数是指除了 1 和它本身以外,不能被任何整数整除的数,例如...
    99+
    2023-06-29
  • c语言如何求水仙花数
    水仙花数是指一个三位数,它的各个位上的数字的立方和等于它本身。下面是使用C语言求水仙花数的方法:```c#include int m...
    99+
    2023-08-08
    c语言
  • 如何理解Java语言
    本篇内容介绍了“如何理解Java语言”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、概述多年以来,Java始终高居很受欢迎的编程语言榜首位...
    99+
    2023-06-16
  • 学习C语言如何求解最大公约数
    学习C语言如何求解最大公约数,需要具体代码示例 最大公约数(Greatest Common Divisor,简称GCD)是指两个或多个整数中能够整除它们的最大正整数。在计算机编程中经常...
    99+
    2024-02-22
    c语言 最大公约数 求解
  • LeetCode异步编程,Go语言如何做出完美响应?
    在当今的互联网开发中,异步编程已经成为了非常重要的一环。异步编程可以提高程序的响应速度,增加程序的可扩展性,从而提高程序的性能。而在LeetCode算法题中,异步编程也是一个非常重要的话题。本文将介绍Go语言如何做出完美响应的异步编程实现...
    99+
    2023-11-12
    响应 leetcode 异步编程
  • c语言如何求最小公倍数
    可以使用以下方法来求最小公倍数:```c#include int gcd(int a, int b) {if (b == 0) {r...
    99+
    2023-09-28
    c语言
  • C语言如何求最大公约数
    本篇内容介绍了“C语言如何求最大公约数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. C语言简介1.1 C语言发展史C语言是一种广泛使用...
    99+
    2023-06-29
  • Unix与Go语言的完美结合:如何编写高性能的Spring函数?
    在当今互联网时代,高性能的软件已经成为了各大企业和组织必不可少的需求。而Unix和Go语言都是高性能软件开发的重要组成部分,它们的完美结合可以帮助我们编写高性能的Spring函数。 Unix作为一种操作系统,自然而然地具有很多高性能的特性...
    99+
    2023-09-04
    spring unix 函数
  • 如何用C语言求出水仙花数
    如何用C语言求出水仙花数,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。题目描述求出所有的水仙花数分析百度百科:水仙花数(Narcissistic number)...
    99+
    2023-06-21
  • C语言中如何求大数的阶乘
    这篇“C语言中如何求大数的阶乘”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言中如何求大数的阶乘”文章吧。首先定义一个函...
    99+
    2023-06-16
  • Go语言和NumPy数组:开发技术的完美组合?
    Go语言和NumPy数组都是在各自领域内非常流行的技术。Go语言是一种开发高并发应用程序的编程语言,而NumPy是一个用于数值计算的Python库。这两种技术在不同的领域内都有着广泛的应用,但是它们也可以被结合在一起,形成更加强大的开发技...
    99+
    2023-06-17
    numpy 数组 开发技术
  • Linux系统下Go语言与NumPy函数的完美结合
    在数据科学领域,NumPy是一个极其重要的Python库,它提供了高效的多维数组操作和数学函数。然而,Python的解释型语言特性往往会导致性能瓶颈,尤其是在处理海量数据时。而Go语言则是一种编译型语言,具有高效、并发和安全等特点,因此在...
    99+
    2023-10-29
    numy 函数 linux
  • 关于Mysql 4.1语言问题的完美解决方法(转)
    关于Mysql 4.1语言问题的完美解决方法(转)[@more@]可以不需要修改my.ini。在建立数据库的时候,对库和表的字符集设置不太重要,但是对文本类型的字段最好都设置为GBK字符集。对于已有的数据库...
    99+
    2024-04-02
  • C语言如何求取极值
    这篇文章主要为大家展示了“C语言如何求取极值”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C语言如何求取极值”这篇文章吧。求取极值#define MA...
    99+
    2024-04-02
  • c语言如何求三个数的平均值
    要求三个数的平均值,首先需要将这三个数相加,然后再除以3。以下是用C语言编写的示例代码:```c#include int main(...
    99+
    2023-08-14
    c语言
  • c语言函数如何求两个数的最大值
    目录c语言函数求两个数的最大值c语言​求十个数中的最大值解题思路具体代码总结c语言函数求两个数的最大值 #include <stdio.h> max(int a,int...
    99+
    2022-12-08
    c语言函数 求两个数最大值 c语言求最大值
  • 响应数组:Go语言和Apache服务器的完美结合?
    随着互联网的不断发展,越来越多的网站和应用程序需要处理大量的数据,而这些数据的处理需要高效的服务器和编程语言。Go语言和Apache服务器的组合正是一种完美的选择。 Go语言是一种开源的编程语言,由Google开发,它具有高效、简洁和并发...
    99+
    2023-10-21
    apache 数组 响应
  • Go语言和Linux系统:大数据处理的完美组合?
    随着数据规模的不断增大,大数据处理已经成为了当今计算机领域中的一个热门话题。而在这个领域中,Go语言和Linux系统的组合已经成为了许多人眼中的“完美组合”。 Go语言是一种由Google开发的编程语言,它的特点包括高并发、高效率和易学易...
    99+
    2023-07-30
    大数据 linux 二维码
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作