Java 中 10,000 以内且 3、5 或 7 的倍数的数字之和

2024-03-19

我知道如何让程序将 3、5 和 7 中每一个的倍数总和相加,但我不确定如何让程序只使用每个数字一次。例如,我可以让程序找出所有数字并将它们相加为 3,然后对 5 执行相同操作,但数字 15 将出现在最终数字中两次。我不确定如何让它只接受一次号码。谢谢你的帮助。


虽然生成和测试方法很容易理解,但如果您想在更大的数字上运行它,它也不是很有效。相反,我们可以使用包含排除原则 http://en.wikipedia.org/wiki/Inclusion%E2%80%93exclusion_principle.

这个想法是首先通过分别查看 3、5 和 7 的倍数来总结太多的数字。然后我们减去计算了两次的数,即 3*5、3*7 和 5*7 的倍数。但现在我们减去了太多,需要再次加回3*5*7的倍数。

我们首先求所有整数的总和1..n是的倍数k。首先我们要知道有多少个,m = n / k,由于整数除法而向下舍入。现在我们只需要总结序列k + 2*k + 3*k + ... + m*k。我们剔除出k并得到k * (1 + 2 + ... + m).

这是一个著名的算术级数,我们知道它的和k * m * (m + 1)/2 (See 三角形数 http://en.wikipedia.org/wiki/Triangular_number).

private long n = 9999;
private long multiples(long k) {
    long m = n / k;
    return k * m * (m + 1) / 2:
}

现在我们只需使用包含-排除来得到最终的总和:

long sum = multiples(3) + multiples(5) + multiples(7)
         - multiples(3*5) - multiples(3*7) - multiples(5*7)
         + multiples(3*5*7);

这将更好地扩展到更大n不仅仅是循环所有值,但要注意溢出并更改为BigInteger如果需要的话。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 中 10,000 以内且 3、5 或 7 的倍数的数字之和 的相关文章

随机推荐

  • 定义全局 android.widget var/val 时的“lateinit”或“by懒惰”

    定义全局时android widget变量 例如TextView 是否最好使用lateinit or by lazy 我最初想使用by lazy会被首选 因为它是不可变的 但我不完全确定 by lazy例子 class MainActivi
  • React-router - 如何在 React 中的页面之间传递数据?

    我正在开发一个项目 必须将数据从一个页面传递到另一个页面 例如 我有data在第一页上 let data id 1 name Ford color Red id 2 name Hyundai color Blue 这是第一个组件页面 我在其
  • javascript:如何调试键盘事件

    想象一个使用自定义键盘事件处理程序的 Web 应用程序 该处理程序可能会执行事件冒泡或事件捕获 有没有办法 例如 Firefox Firebug 插件 调试每个击键 键盘事件 就像是 显示事件类型和所有属性 跟踪哪个 javascript
  • 在三个js中使用鼠标悬停更改网格的颜色

    我已经编写了一个 WebGL 脚本 该脚本使用 jsonloader 和 Three js 显示多个网格 现在我想添加 MouseOver 和 onClick 事件 第一个是当鼠标悬停在网格上时简单地更改网格的颜色 function ren
  • PHP/Smarty 来自数据库的嵌套数组

    好的 我正在尝试通过嵌套查询访问 php mysql 数据库 例如 我有 2 张桌子 1 人和 2 登记 我在注册中有一个推荐 ID 选项卡 因此 当用户登录时 他应该能够看到在其 ID 下完成的 4 级注册 表结构 登记 编号 注册ID
  • Seaborn FacetGrid 包括用于删除级别的空列/行[重复]

    这个问题在这里已经有答案了 我正在使用内置的 Seaborn 数据集钻石建立一个基于 切割 和 颜色 的 FacetGrid 然而 我首先删除颜色 D 和 E 以及剪切 Fair 希望得到 5x5 网格 我的代码是 diamonds sns
  • PHP 类型转换混乱

    我有以下代码 我一直认为 res 应该是 false 就像上面的表达式一样 PHP 会尝试将 val 类型转换为布尔类型 其中零将被转换为 false 和字符串 非空字符串为 true 但是如果我执行上面的代码输出将是 boolean tr
  • 何时使用 Hashie::Mash?

    正在从这个 JSON API 获取一些产品 我想知道 我真的需要吗Hashie Mash 直播应用程序 http runnable com U QJCIFvY2RGWL9B pretty json keys http runnable co
  • 获取每秒音频文件的最大幅度

    我知道这里有一些类似的问题 但大多数都与生成波形有关images 这不是我想要的 我的目标是为音频文件生成波形可视化 类似于 SoundCloud 但不是图像 我希望获得数组中音频剪辑每秒 或半秒 的最大幅度数据 然后我可以使用这些数据创建
  • 使用 ACTION_IMAGE_CAPTURE 拍照并 setImageBitmap 来显示它

    编辑我更新了代码以反映两个答案中建议的更改 不幸的是 现在我的应用程序强制关闭 错误列在底部 这是我的相机 图片类的全部内容 除了imports 这个类应该拍摄一张照片 将其显示到屏幕上 并让另一个类拥有图片的字符串路径以用作附件 它拍摄的
  • 在 Java/JRI 代码中加载 R 自己创建的库时出现问题

    我创建了自己的新 R 库 称为 Media 当我尝试用RGui加载它时没有问题 并且可以调用新包中定义的函数 这就是我加载它的方式 gt library Media 但是 我也尝试从以下位置调用该函数Java JRI http www rf
  • 验证器:禁用客户端时,它们在回发时是否保持禁用状态?

    我一直在学习很多关于标准 asp net 验证器的知识 我最新的发现是关于如何禁用验证器客户端 这非常酷 现在 如果我的初始帖子启用了验证器 但在客户端 我禁用它 服务器端是否识别客户端更改并保留它 或者在页面发送回用户时重新启用它 Tha
  • 如何在我的请求中使用从 Twitter OAuth 1.0a 获得的“用户上下文访问令牌”?

    我已经成功 实现了 Twitter 三足身份验证过程来获取用户访问令牌 问题是访问令牌似乎无效 或者我使用错误 我已经能够获取应用程序的访问令牌 它可以访问有限的 Twitter API 我通过在标题上添加 身份验证 承载 访问令牌 来使用
  • 来自响应内容流的 Pandas 0.25.0 和 xlsx

    r requests get projectsExportURL auth username password verify False stream True r raw decode content True add snapshot
  • 从 Django 1.7.1 升级到 1.8.2 失败

    我的 Django 1 7 1 应用程序运行良好 但我想升级到更新的版本 1 8 2 我正在按照说明进行操作here https docs djangoproject com en 1 8 howto upgrade version 基本上
  • 如何在提交后的钩子脚本中获取项目路径?(git)

    我想调用位于存储库中的脚本 我当然可以执行以下操作 bin sh myscript sh 但我认为这不太好 那么如何在提交后脚本中获取项目的路径呢 When you re dealing with a non bare repository
  • 动态对话框——bash 中的菜单框

    我正在寻找有关在 bash 中制作动态对话框菜单框的良好解释 我正在尝试从具有如下结构的文件加载用户列表 user rw412 0 2 rx511 23 1 sgo23 9 2 fs352 1 4 another user rw412 0
  • 阿帕奇“找不到文件。”而不是 404. 错误文档

    我想设置自定义 404 错误文档 但我遇到了问题 首先 我的 htaccess 中有两个 RewriteRules RewriteRule 2 3 php lang 1 L RewriteRule 2 3 4 php lang 1 L 所以
  • 在新的 Android Studio 项目上获取“错误:无法在 null 对象上获取属性 ':lib'”

    我已经使用 Android Studio 创建了一个新项目 并在其中添加了新的 lib 项目 但现在我得到了 Error Cannot get property lib on null object 显然我设法通过添加逗号来解决它setti
  • Java 中 10,000 以内且 3、5 或 7 的倍数的数字之和

    我知道如何让程序将 3 5 和 7 中每一个的倍数总和相加 但我不确定如何让程序只使用每个数字一次 例如 我可以让程序找出所有数字并将它们相加为 3 然后对 5 执行相同操作 但数字 15 将出现在最终数字中两次 我不确定如何让它只接受一次