java - 查找范围内数字的倍数 [Java]

标签 java performance numbers

我们已获得一个范围 A<=B 和一个数字 M。我们必须找出给定范围内有多少个 M 的倍数。

我的解决方案:

import java.util.Scanner;

class ABC {
public static void main(String args[] ) throws Exception {

    Scanner sc = new Scanner(System.in);
    int N = sc.nextInt();
    for (int i = 0; i < N; i++) {
        long A = sc.nextLong();
        long B = sc.nextLong();
        long M = sc.nextLong();

        int res = 0;
        while(A<=B)
        {
            if(A%M==0)res++;
            A++;
        }
        System.out.println(res+"");
    }
    }
}

现在这不是很有效。请告诉我如何在最短的时间内解决这个问题。

最佳答案

n1*M ≥ A 的最小整数 n1 为 n1=ceil(A/M),n2*M ≤ B 的最大整数 n2 为 n2=floor(B/M)。 n1 和 n2 之间的整数个数为 max_of(n2−n1+1 ; 0)。

结合以上我们得到答案:

max_of(floor(Z/X)−ceil(Y/X)+1;0)

这是竞争性编程中的一个标准问题:D

关于java - 查找范围内数字的倍数 [Java],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31870932/

相关文章:

java - 使用用户定义的方法删除数组中的重复项

java - 在屏幕右下角的位置

java - 将音乐添加到 Java

PHP快速随机字符串函数

用于计算均值、中位数、众数和其他统计数据的 c 库?

python - 限制 python 仅使用实数空间

java - LibGdX 平铺 map Box2d 与多边形 map 对象碰撞

相似条件下 Javascript 函数调用开销的差异

python - Python如何处理检查 'if object in list'

java - 每次运行相同输入时生成唯一的随机数序列