You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何找出指定范围中的最大模数值?附Java实现代码

找出1到n的数对m取模的最大值的Java实现

嘿,我看你已经写出了一段能完美实现需求的Java代码啦!先给你点个赞😉

你的代码逻辑很清晰,先来看下完整的实现:

import java.util.*;
public class p2 {
    public static void main(String[] args) {
        ArrayList<Integer> ar = new ArrayList<>();
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        for(int i = 1; i <= n; i++) {
            int mod = i % m;
            ar.add(mod);
        }
        System.out.println(Collections.max(ar));
    }
}

代码逻辑拆解

  • 首先创建一个ArrayList用来存储1到n每个数对m取模的结果
  • 通过Scanner获取输入的两个整数:n是我们要遍历的范围上限,m是模数
  • 循环遍历1到n的每一个数,计算i % m得到模值,把结果添加到列表里
  • 最后调用Collections.max()方法直接找出列表中的最大值并输出

举个例子验证

比如输入5和3时:
1到5的数分别对3取模,得到的结果是1、2、0、1、2,其中最大的模数值就是2,和代码的输出完全一致,没问题!

小优化建议(可选)

其实我们完全不需要存储所有的模值,通过数学规律就能直接得出结果:

  • 如果n >= m,那最大模值肯定是m-1(因为m-1对m取模就是它本身,而且只要n不小于m,这个数一定在1到n的范围内)
  • 如果n < m,那最大模值就是n(因为n比m小,n对m取模就是它自己)

基于这个规律,我们可以写出更高效的代码,节省内存空间(尤其是当n很大的时候):

import java.util.Scanner;
public class p2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int maxMod = n >= m ? m - 1 : n;
        System.out.println(maxMod);
    }
}

内容的提问来源于stack exchange,提问作者TimothyW553

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:35:28