打印出可被其他数字整除的数字的Java程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了打印出可被其他数字整除的数字的Java程序相关的知识,希望对你有一定的参考价值。

我有一个程序读取两个实数,然后打印出这两个之间的所有数字,可以被2或3或5整除。程序工作正常,但当用户输入两个非常大的数字时(例如,1122222123333)和214123324434434)该程序需要很长时间来计算结果。我想以某种方式修复程序,以便即使对于大数字,结果也会立即打印出来。

这是我目前的代码:

import java.util.Scanner;
public class Numbers 
{
    public static void main(String[] args) 
    {
        Scanner sc = new Scanner(System.in);        
        long x = sc.nextLong();   // first number input 
        long y = sc.nextLong();   // second number input            
        long num = 0;            // new variable num -- means all the numbers between these to given input numbers
        long count = 0;            // loop counter - how many numbers are divided by 2 or 3 or 5                        
        for (num = x; x <= num && num <= y; num++) {                                                    
            if (num % 2 == 0 | num % 3 == 0 | num % 5 == 0) {
                count = count + 1;             // increasing the counter by 1, so that every time the loop repeats, the counter increases...                                
            }               
        }
        System.out.println(count);  // prints out how many numbers are divided by 2 or 3 or 5 ...       
    }
}
答案

好吧,你根本不需要循环。

  1. 您知道x和y之间可被2整除的数字是(y-x)/ 2(加减1)。
  2. 类似地,可被3整除的x和y之间的数字的数量是(y-x)/ 3(加减1)。
  3. 并且可以被5整除的x和y之间的数字是(y-x)/ 5(加减1)。

您只需删除多次计算的数字即可。

如果你考虑组A,B和C,分别被2,3和5(在所需范围内)整除的数字组,你的目标是找到:

|工会B联盟C | = | A | + | B | + | C | - |与B |的交点 - |与C |的交集 - | B与C |的交点+ | B与C |交叉的交点

因此,您必须减去可被2 * 3整除的数字,可被2 * 5整除的数字和可被3 * 5整除的数字。最后,您必须添加可被2 * 3 * 5整除的数字。

示例:

在1000和2000之间,大约(2000-1000)/ 2 = 500个可被2整除的数字:1000,1002,1004,...,2000。实际上,计数是1,因为它是501而不是500,但你可以通过添加一些检查范围边缘的逻辑来调整。

类似地,大约有(2000-1000)/ 3 = 333个可被3整除的数字:1002,1005,1008,......,1998。

约(2000-1000)/ 5 = 200个数字可被5:1000,1005,1010,...,2000整除。这里的计数再次被一个人关闭。

另一答案

不是真正的答案,但由于我的声誉得分低,我不允许发表评论。

如果一个数字可以被2或3整除,或者如果你从该数字中加上或减去30(= 2 * 3 * 5),则数字不会改变。因此,您可以计算从1到30的匹配数字,然后计算您的范围内有多少30个数字的块,然后计算这些块未涵盖的匹配数字。

以上是关于打印出可被其他数字整除的数字的Java程序的主要内容,如果未能解决你的问题,请参考以下文章

打印第三个数字和所有可被2整除的元素

数字总和可被 K 整除的子数组的数量

javascript 可被M整除的数字

设计 DFA 接受可被数字“n”整除的二进制字符串

Python:试图从一个寻找可被 3 整除的数字的 for 循环中创建一个逗号分隔的列表

Leetcode 1262. 可被三整除的最大和