当前位置: 首页 > news >正文

JAVA经典百题之找完数

题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。

程序分析

首先,我们需要编写一个程序来找出1000以内的所有完数。"完数"是指一个数等于它的因子之和,因此,我们需要遍历每个数,计算它的因子并检查是否满足这个条件。

解题思路

我们可以使用三种不同的方法来实现这个程序:

  1. 暴力法:对每个数进行因子分解,并检查是否满足完数条件。

  2. 优化暴力法:减少因子的搜索范围,通过观察发现因子一定在 1 到 sqrt(n) 之间。

  3. 欧几里得算法:利用数论知识,将因子的搜索范围缩小到 sqrt(n) 以内。

1. 暴力法

程序实现

import java.util.ArrayList;
import java.util.List;public class PerfectNumbers {public static boolean isPerfect(int num) {int sum = 1;  // 1 is always a factor of any numberfor (int i = 2; i <= num / 2; i++) {if (num % i == 0) {sum += i;}}return (sum == num);}public static List<Integer> findPerfectNumbers(int limit) {List<Integer> perfectNumbers = new ArrayList<>();for (int i = 2; i <= limit; i++) {if (isPerfect(i)) {perfectNumbers.add(i);}}return perfectNumbers;}public static void main(String[] args) {int limit = 1000;List<Integer> perfectNumbers = findPerfectNumbers(limit);System.out.println("Perfect numbers within 1 to " + limit + ": " + perfectNumbers);}
}

优缺点

  • 优点

    • 实现简单,容易理解。
  • 缺点

    • 算法效率较低,时间复杂度为 O(n^2),对于较大范围的数需要大量计算。

2. 优化暴力法

程序实现

import java.util.ArrayList;
import java.util.List;public class PerfectNumbers {public static boolean isPerfect(int num) {int sum = 1;  // 1 is always a factor of any numberfor (int i = 2; i <= Math.sqrt(num); i++) {if (num % i == 0) {sum += i;if (i != num / i) {sum += num / i;}}}return (sum == num);}public static List<Integer> findPerfectNumbers(int limit) {List<Integer> perfectNumbers = new ArrayList<>();for (int i = 2; i <= limit; i++) {if (isPerfect(i)) {perfectNumbers.add(i);}}return perfectNumbers;}public static void main(String[] args) {int limit = 1000;List<Integer> perfectNumbers = findPerfectNumbers(limit);System.out.println("Perfect numbers within 1 to " + limit + ": " + perfectNumbers);}
}

优缺点

  • 优点

    • 优化了因子的搜索范围,时间复杂度为 O(n*sqrt(n)),比暴力法效率高。
  • 缺点

    • 仍然需要对每个数进行因子分解,效率仍然不是最优。

3. 欧几里得算法

程序实现

import java.util.ArrayList;
import java.util.List;public class PerfectNumbers {public static boolean isPerfect(int num) {if (num <= 1)return false;int sum = 1;  // 1 is always a factor of any numberfor (int i = 2; i * i <= num; i++) {if (num % i == 0) {sum += i;if (i != num / i) {sum += num / i;}}}return (sum == num);}public static List<Integer> findPerfectNumbers(int limit) {List<Integer> perfectNumbers = new ArrayList<>();for (int i = 2; i <= limit; i++) {if (isPerfect(i)) {perfectNumbers.add(i);}}return perfectNumbers;}public static void main(String[] args) {int limit = 1000;List<Integer> perfectNumbers = findPerfectNumbers(limit);System.out.println("Perfect numbers within 1 to " + limit + ": " + perfectNumbers);}
}

优缺点

  • 优点

    • 采用了更优化的因子搜索范围,时间复杂度为 O(n*sqrt(n)/log(n)),效率比前两种方法更高。
  • 缺点

    • 需要理解欧几里得算法,可能对于初学者有一定难度。

总结

  • 在这个问题中,欧几里得算法是最优的选择,具有较高的效率和较小的时间复杂度。它通过缩小因子搜索范围,减少了不必要的计算,使得程序更高效。

  • 如果对于简单问题或者不追求高效率,暴力法是一种简单易懂的解决方案。

  • 优化暴力法介于两者之间,比暴力法效率高,但比欧几里得算法略逊一筹。可根据实际情况选择使用。

综上所述,推荐使用欧几里得算法来解决这个问题。

相关文章:

JAVA经典百题之找完数

题目&#xff1a;一个数如果恰好等于它的因子之和&#xff0c;这个数就称为"完数"。例如61&#xff0b;2&#xff0b;3.编程找出1000以内的所有完数。 程序分析 首先&#xff0c;我们需要编写一个程序来找出1000以内的所有完数。"完数"是指一个数等于它的…...

CSS 滚动驱动动画 view-timeline-inset

view-timeline-inset 语法例子&#x1f330; 正 scroll-padding 为正正的 length正的 percentage 负 scroll-padding 为负负的 length负的 percentage 兼容性 view-timeline-inset 在使用 view() 时说过, 元素在滚动容器的可见性推动了 view progress timeline 的进展. 默认…...

ansible部署二进制k8s

简介 GitHub地址&#xff1a; https://github.com/chunxingque/ansible_install_k8s 本脚本通过ansible来快速安装和管理二进制k8s集群&#xff1b;支持高可用k8s集群和单机k8s集群地部署&#xff1b;支持不同版本k8s集群部署&#xff0c;一般小版本的部署脚本基本是通用的。 …...

Nginx限流熔断

一、Nginx限流熔断 Nginx 是一款流行的反向代理和负载均衡服务器&#xff0c;也可以用于实现服务熔断和限流。通过使用 Nginx 的限流和熔断模块&#xff0c;比如&#xff1a;ngx_http_limit_req_module 和 ngx_http_limit_conn_module&#xff0c;可以在代理层面对服务进行限流…...

QQ登录的具体流程

文章目录 网站授权QQ登录QQ登录的完整流程代码示例1. 添加依赖2. 配置文件3. 实现Service4. 创建Controller 网站授权QQ登录 首先需要去QQ互联申请应用填写网站的相关信息&#xff0c;以及回调地址&#xff0c;需要进行审核。申请流程暂时不说了&#xff0c;百度一下挺多申请失…...

用JMeter对HTTP接口进行压测(一)压测脚本的书写、调试思路

文章目录 安装JMeter和Groovy为什么选择Groovy&#xff1f; 压测需求以及思路准备JMeter脚本以及脚本正确性验证使用Test Script Recorder来获取整条业务线上涉及的接口为什么使用Test Script Recorder&#xff1f; 配置Test Script Recorder对接口进行动态化处理处理全局变量以…...

接着聊聊如何从binlog文件恢复误delete的数据,模拟Oracle的闪回功能

看腻了文章就来听听视频演示吧&#xff1a;https://www.bilibili.com/video/BV1cV411A7iU/ delete忘加where条件&#xff08;模拟Oracle闪回&#xff09; 操作基本等同于上篇&#xff1a;再来谈谈如何从binlog文件恢复误update的数据&#xff0c;模拟Oracle的回滚功能 原理&a…...

计算机竞赛 深度学习机器视觉车道线识别与检测 -自动驾驶

文章目录 1 前言2 先上成果3 车道线4 问题抽象(建立模型)5 帧掩码(Frame Mask)6 车道检测的图像预处理7 图像阈值化8 霍夫线变换9 实现车道检测9.1 帧掩码创建9.2 图像预处理9.2.1 图像阈值化9.2.2 霍夫线变换 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分…...

pyqt5使用经验总结

pyqt5环境配置注意&#xff1a; 安装pyqt5 pip install PyQt5 pyqt5-tools 环境变量-创建变量名&#xff1a; 健名&#xff1a;QT_QPA_PLATFORM_PLUGIN_PATH 值为&#xff1a;Lib\site-packages\PyQt5\Qt\plugins pyqt5经验2&#xff1a; 使用designer.exe进行设计&#xff1…...

【MQTT】mosquitto库中SSL/TLS相关API接口

文章目录 1.相关API1.1 mosquitto_tls_set1.2 mosquitto_tls_insecure_set1.3 mosquitto_tls_opts_set1.4 mosquitto_tls_insecure_set1.5 mosquitto_tls_set_context1.6 mosquitto_tls_psk_set 2.示例代码 Mosquitto 是一个流行的 MQTT 消息代理&#xff08;broker&#xff09…...

假期题目整合

1. 下载解压题目查看即可 典型的猪圈密码只需要照着输入字符解开即可得到答案 2. 冷门类型的密码题型&#xff0c;需要特意去找相应的解题思路&#xff0c;直接百度搜索天干地支解密即可 3. 一眼能出思路他已经给了篱笆墙的提示提示你是栅栏密码对应解密即可 4. 最简单的社会主…...

Redisson—分布式服务

一、 分布式远程服务&#xff08;Remote Service&#xff09; 基于Redis的Java分布式远程服务&#xff0c;可以用来通过共享接口执行存在于另一个Redisson实例里的对象方法。换句话说就是通过Redis实现了Java的远程过程调用&#xff08;RPC&#xff09;。分布式远程服务基于可…...

volatile使用方法

volatile使用方法 编译优化。使用等级3的话&#xff0c;可能将优化了一些变量。 这为什么会开启等第三呢&#xff1f;这是关于单片机的内存容量比较小&#xff0c;所以开启优化的话&#xff0c;可以可以省一些空间&#xff0c;但是如果。会出现些变量的问题&#xff0c;需要通过…...

提升您的 Go 应用性能的 6 种方法

优化您的 Go 应用程序 1. 如果您的应用程序在 Kubernetes 中运行&#xff0c;请自动设置 GOMAXPROCS 以匹配 Linux 容器的 CPU 配额 Go 调度器 可以具有与运行设备的核心数量一样多的线程。由于我们的应用程序在 Kubernetes 环境中的节点上运行&#xff0c;当我们的 Go 应用程…...

计算摄像技术02 - 颜色空间

一些计算摄像技术知识内容的整理&#xff1a;颜色视觉与感知特性、颜色空间和基于彩色滤镜阵列的彩色感知。 文章目录 一、颜色视觉与感知特性 &#xff08;1&#xff09;色调 &#xff08;2&#xff09;饱和度 &#xff08;3&#xff09;明度 二、颜色空间 &#xff08;1&…...

Pytorch笔记之分类

文章目录 前言一、导入库二、数据处理三、构建模型四、迭代训练五、模型评估总结 前言 使用Pytorch进行MNIST分类&#xff0c;使用TensorDataset与DataLoader封装、加载本地数据集。 一、导入库 import numpy as np import torch from torch import nn, optim from torch.uti…...

【目标检测】——PE-YOLO精读

yolo&#xff0c;暗光目标检测 论文&#xff1a;PE-YOLO 1. 简介 卷积神经网络&#xff08;CNNs&#xff09;在近年来如何推动了物体检测的发展。许多检测器已经被提出&#xff0c;而且在许多基准数据集上的性能正在不断提高。然而&#xff0c;大多数现有的检测器都是在正常条…...

Java 数组转集合

数组转集合 如果仅仅这样转化Arrays.asList(数组)&#xff0c;导致集合只能查询&#xff0c;无法进行其他操作&#xff0c;因此&#xff0c;对该方法进行优化&#xff1a; List<实体> list1 new ArrayList<>(Arrays.asList(数组))以上方法就可以使用集合的所有操…...

Elasticsearch:ES|QL 查询语言简介

警告&#xff1a;此功能处于技术预览阶段&#xff0c;可能会在未来版本中更改或删除。 Elastic 将尽最大努力解决任何问题&#xff0c;但技术预览版中的功能不受官方 GA 功能的支持 SLA 的约束。在目前的 Elastic Stack 8.10 中此功能还没有提供。 Elasticsearch 查询语言 (ES|…...

qt qml中listview出现卡顿情况时的常用处理方法

如果在qt QML中使用ListView时出现卡顿情况&#xff0c;可能是因为渲染大量的数据或者在模型中进行复杂的数据处理。以下是常用的解决方法&#xff1a; 1. 设置ListView的缓存策略&#xff1a;通过设置ListView的cacheBuffer属性为适当的值&#xff0c;可以提高滚动的流畅性。…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...