求解亲和数

  【问题描述】

  古希腊数学家毕达哥拉斯在自然数研究中发现,220的所有真约数(即不是自身 的约数)之和为: 1+2+4+5+10+11+20+22+44+55+110=284。而284的所有真约数为1、2、4、71、142,加起来恰好为220。人 们对这样的数感到很惊奇,并称之为亲和数。一般地讲,如果两个数中任何一个数都是另一个数的真约数 之和,则这两个数就是亲和数。

  220和284是人类最早发现,又是最小的一对亲和数。第二对亲和数(17296,18416)直到2000多年后的1636年才由法国数学家费马发现。1638年,法国数学家笛 卡儿发现了第三对亲和数,而大数学家欧拉在1747年一下子给出了30对亲和数, 1750年又增加到60对。到目前为止,人类已经发现了近千对亲和数。然而,令人惊 奇的是,第二对最小的亲和数(1184,1210)竟然被数学家们遗漏了,直到1886年才 由意大利的一位16岁男孩发现。

  这里不要求你找到一对亲和数,而是对于每个正整数n,求出这个数的真约数之和。

  比如,n=220,答案是284,如果n=284,答案是220。

  【输入形式】

  有多组测试数据,每组测试数据一行,是一个正整数n, n=0意味着输入结束并且不需要处理。

  40%的测试数据1 ≤ n≤ 10(3);30%的测试数据1 ≤ n≤ 10(4);

  20%的测试数据1 ≤ n≤ 10(5);10%的测试数据1 ≤ n≤ 10(6);

  【输出形式】

  对于每组测试数据,输出一行,包含一个正整数,表示n的真约数之和。

  【样例输入】

220
284
0

  【样例输出】

284
220

解题思路

问题关键:如何高效地找到一个数的所有真约数之和。一个直观的方法是遍历从1到n-1的所有数,检查它们是否是n的约数,并计算它们的和。然而,这种方法在n非常大时会非常慢。更高效的方法是只遍历到\sqrt{n},因为大于\sqrt{n}的约数可以通过n / 约数 得到。这样可以显著减少计算量。

  1. 对于每个输入的正整数n,初始化一个变量sum来存储真约数之和,初始值为1(因为1是所有正整数的真约数)。

  2. 从2遍历到\sqrt{n},对于每个i,检查它是否是n的约数。

    1. 如果i是n的约数,检查i是否等于 n / i(即检查是否是平方根)。

      • 如果是,只加i到sum(因为在这种情况下,i和 n / i实际上是同一个数)。

      • 如果不是,将 i 和 n / i 都加到sum。

  3. 特别注意,如果n为1,其真约数之和应为0,因为1没有真约数。

  4. 输出sum。

Java代码

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while (true) {int n = scanner.nextInt();if (n == 0) break; // 输入结束System.out.println(sumOfDivisors(n));}scanner.close();}// 计算并返回n的真约数之和private static int sumOfDivisors(int n) {if (n == 1) return 0; // 1没有真约数int sum = 1; // 所有数都至少有一个真约数1// 只需要检查到sqrt(n),因为大于sqrt(n)的约数可以通过n / 约数得到for (int i = 2; i <= Math.sqrt(n); i++) {if (n % i == 0) {sum += i;if (i != n / i) { // 避免平方根被加两次sum += n / i;}}}return sum;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/6849.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Cloud架构进化实操:Eureka、Apollo、OpenFeign、Ribbon、Zuul组件

文章目录 前言一、引出二、服务注册与发现2.1 创建Eureka注册中心2.1.1 引入pom依赖2.1.2 配置yaml2.1.3 启动服务21.4 测试访问 2.2 创建服务提供者2.2.1 配置yaml2.2.2 启动服务2.2.3 测试访问 2.3 创建服务消费者2.3.1 服务提供者接口2.3.2 服务消费者调用接口 三、负载均衡…

用户中心(优化)

文章目录 功能扩充管理员修改用户信息管理员删除用户管理员添加用户添加个人主页&#xff0c;可以完善个人信息&#xff08;上传头像没有实现&#xff09;添加默认头像打造一个所有用户可发帖的页面前端页面&#xff0c;√后端建表&#xff0c;接口&#xff0c;√前后端联调√ …

W801学习笔记二十:宋词学习应用

前三章完成了唐诗的应用&#xff0c;本章将实现宋词的学习应用。 宋词与唐诗的区别不大&#xff0c;马上开始。 1、我们需要参考前面唐诗的方式&#xff0c;把宋词文本下载下来&#xff0c;并进行格式整理。 W801学习笔记十七&#xff1a;古诗学习应用——上 2、在菜单中添加…

[论文阅读]Adversarial Autoencoders(aae)和代码

In this paper, we propose the “adversarial autoencoder” (AAE), which is a probabilistic autoencoder that uses the recently proposed generative adversarial networks (GAN) to perform variational inference by matching the aggregated posterior of the hidden …

proxmox宿主机安装桌面

装完proxmox启动后一般进入shell界面&#xff0c;之后都是另外一台电脑连接web管理等操作&#xff0c;一直用起来还好。不过这样需要另外一台电脑连接管理操作&#xff0c;有时候调试时毕竟还是会有些不方便&#xff0c;就想能不能在宿主机上装个桌面做这类事&#xff0c;今天用…

python数据分析——大数据和云计算

大数据和云计算 前言一、大数据二、大数据定义三、数据存储单位四、大数据存储技术五、大数据应用技术六、大数据特征七、数据容量八、数据类型的多样性8.1结构化数据8.2半结构化数据8.3非结构化数据 九、获取数据的速度十、可变性十一、真实性十二、复杂性十三、价值十四、云计…

传输控制协议TCP

一、TCP简介 TCP是面向连接的&#xff1a; TCP连接只能有两个端点&#xff0c;TCP连接是点对点的&#xff1b; TCP提供可靠交互的服务&#xff1b; TCP提供全双工通信。 面向字节流&#xff1a; TCP中的“流”指的是流入或流出进程的字节序列&#xff1b; 虽然应用程序和…

理解 python 中的* 打包和解包

注意&#xff0c; 本文的打包和解包的概念有点类似与java 的装箱和解箱 但是还是有点区别 java 中的装箱指的是 把一系列的值让放入1个对象的属性中 而python的打包概念 包括 把一组元素打包成1个list or tuple把一系列 key value pair 打包成1个dict Python * 的基本功能&a…

Mac基于Docker-ubuntu构建c/c++编译环境

编译环境安装和使用被充分验证&#xff0c;如有期望补充的内容欢迎留言评论。 目录 前言 Docker desktop下载安装 修改镜像源 选择ubuntu镜像 docker容器启动 参数说明: 宿主机与docker容器文件共享 宿主机与docker容器拷贝文件 为 Ubuntu 配置 ssh、vim、make 相关工…

Flyway使用教程

Flyway使用教程 背景&#xff1a; 在开发环境对多个不同版本的分支进行开发&#xff0c;如果此时涉及到多张表结构修改&#xff08;比如新增字段&#xff09;&#xff0c;而在测试环境时却忘了整理SQL 脚本给测试人员执行&#xff0c;就会导致出现 bug&#xff0c;从而影响测试…

Android selinux权限

一.SE 概述 SELinux 是由美国NSA&#xff08;国安局&#xff09;和 SCC 开发的 Linux的一个扩张强制访问控制安全模块。原先是在Fluke上开发的&#xff0c;2000年以 GNU GPL 发布。从 fedora core 2开始&#xff0c; 2.6内核的版本都支持SELinux。 在 SELinux 出现之前&#…

神经网络模型里面权重衰减的理解

概述 神经网络模型里面&#xff0c;如果少部分参数的绝对值相对其他值过大&#xff0c;就会造成模型过度依赖于某些特征&#xff08;由这些较大值所代表&#xff09;&#xff0c;从而更容易产生过拟合问题。因而&#xff0c;我们有必要针对权重设置一种衰减措施&#xff0c;避…

PHP ASCII码的字符串用mb_convert_encoding 转utf-8之后不生效

检测数据类型是ascii,转码之后再检测还是utf-8没生效 private function toUTF8($str){$encode mb_detect_encoding($str, array("ASCII",UTF-8,"GB2312","GBK",BIG5,LATIN1));if ($encode ! UTF-8) {$str1 mb_convert_encoding($str, UTF-8, …

个人银行账户管理程序(2)

在&#xff08;1&#xff09;的基础上进行改进 1&#xff1a;增加一个静态成员函数total&#xff0c;记录账户总金额和静态成员函数getTotal 2对不需要改变的对象进行const修饰 3多文件实现 account。h文件 #ifndef _ACCOUNT_ #define _ACCOUNT_ class SavingAccount {pri…

力扣经典150题第五十三题:基本计算器

目录 力扣经典150题第五十六题&#xff1a;基本计算器示例提示解题思路 力扣经典150题第五十六题&#xff1a;基本计算器 给你一个字符串表达式 s &#xff0c;请你实现一个基本计算器来计算并返回它的值。 注意:不允许使用任何将字符串作为数学表达式计算的内置函数&#xf…

C#中环境变量

环境变量 什么是环境变量Environment.GetEnvironmentVariable 用于获取指定环境变量的值怎么知道环境变量存不存在&#xff1f;不存在怎么创建&#xff1f; 什么是环境变量 环境变量是操作系统中存储的一种机制&#xff0c;用于保存与操作系统环境和应用程序运行相关的配置信息…

HTML 建立列表——列表标签

HTML 建立列表——列表标签 建立和使用列表 定义列表 <dl></dl>列表标签定义列表; <dt>定义列表标题; <dd>定义列表内容; 说明: 1. dt和dd对应着的, 一个dt可以对应着多个dd; 2. dd完全是为了dt服务的, 对标题进行描述; 实例: <dl> <…

NPM 基础

介绍 npm 是 JavaScript 编程语言的一个包管理器&#xff0c;它允许开发者安装、共享和管理依赖项。npm 与 Node.js 紧密集成&#xff0c;是 Node.js 生态系统中不可或缺的一部分。它提供了一个命令行工具&#xff0c;使得开发者能够轻松地安装、配置和管理项目所需的各种包。…

抓包证书安装到安卓7.0+手机

前言: 首先理解一下,这个不只是证书到浏览器,而是抓包证书到安卓7.0+手机上的文章; 还有一点区分,在浏览器上装的证书,只是让抓包工具可以抓取手机浏览器的包,而不是抓取手机app上的包; 如果你的证书只是简单的在浏览器下进行安装,那么你的手机app是走不了代理网络的…

【微服务】服务保护(通过Sentinel解决雪崩问题)

Sentinel解决雪崩问题 雪崩问题服务保护方案服务降级保护 服务保护技术SentinelFallback服务熔断 雪崩问题 在微服务调用链中如果有一个服务的问题导致整条链上的服务都不可用&#xff0c;称为雪崩 原因 微服务之间的相互调用&#xff0c;服务提供者出现故障服务的消费者没有…