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

打印出可被其他数字整除的数字的Java程序,java,numbers,Java,Numbers,我有一个程序,读取两个实数,然后打印出这两个实数之间的所有数字,可以被2、3或5整除。该程序工作正常,但当用户输入两个非常大的数字(例如112222123333和2141233244344)时,程序需要很长时间来计算结果。我想以某种方式修复这个程序,这样即使对于大的数字,结果也能立即打印出来 以下是我目前的代码: import java.util.Scanner; public class Numbers { public static void main(String[] args)

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

以下是我目前的代码:

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 ...       
    }
}
import java.util.Scanner;
公共课号
{
公共静态void main(字符串[]args)
{
扫描仪sc=新的扫描仪(System.in);
long x=sc.nextLong();//第一个数字输入
长y=sc.nextLong();//第二个数字输入
long num=0;//新变量num——表示这些数字与给定输入数字之间的所有数字
long count=0;//循环计数器-有多少个数字被2、3或5除

对于(num=x;x嗯,您根本不需要循环

  • 你知道x和y之间可以被2整除的数是(y-x)/2(正负一)

  • 类似地,x和y之间可被3整除的数字的数量为(y-x)/3(正减1)

  • x和y之间可被5整除的数是(y-x)/5(正-负一)

  • 你只需要删除你数了不止一次的数字

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

    |A并集B并集C |=| A |+| B |+| C |-| A与B的交点-| A与C的交点-| B与C的交点-| A与B的交点与C的交点|

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

    例如:

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

    类似地,大约有(2000-1000)/3=333个数字可以被3整除:100210051008,…,1998


    大约(2000-1000)/5=200个可被5整除的数字:100010051010,…,2000。这里的计数再次被1整除。

    这不是一个真正的答案,但由于我的低声誉分数,我不允许发表评论


    如果一个数字可被2整除,或被3整除,或被30加减,则5不变(=2*3*5)从这个数字开始。你可以从1到30计算匹配的数字,然后计算30个数字中有多少块在你的范围内,然后计算那些块中没有包括的匹配数字。

    没关系,我自己做了这项研究,花了很多钱,我自己也学到了一些新东西