Java实现指定区间内各数字的约数求解算法需求
Java实现区间内数字的真约数求解算法
核心思路
- 遍历用户指定区间内的每个数字,从
start到end逐个处理; - 对每个数字,从
num/2开始向下遍历到2,筛选出能整除该数字的数(排除1和数字本身的真约数); - 按从大到小的顺序收集约数,最后根据是否有收集到约数输出对应内容。
完整代码实现
import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class SubmultiplesFinder { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 获取用户输入的起始与结束值 System.out.print("start: "); int start = scanner.nextInt(); System.out.print("end: "); int end = scanner.nextInt(); System.out.println(); // 遍历区间内的每个数字 for (int num = start; num <= end; num++) { List<Integer> submultiples = new ArrayList<>(); // 从num的一半开始向下查找,保证约数从大到小收集 for (int i = num / 2; i >= 2; i--) { if (num % i == 0) { submultiples.add(i); } } // 按要求格式输出结果 System.out.print("Submultiples of " + num + ": "); if (submultiples.isEmpty()) { System.out.println("Doesn't have submultiples"); } else { submultiples.forEach(sub -> System.out.print(sub + " ")); System.out.println(); } } scanner.close(); } }
关键逻辑说明
- 高效筛选约数:从
num/2开始向下遍历,因为一个数的最大真约数不会超过自身的一半(质数除外,而质数除了1没有其他真约数),能减少无效遍历; - 输出格式匹配:完全对齐示例的输出样式,空约数时显示指定文本,多约数时按从大到小顺序输出;
- 自定义区间支持:通过
Scanner获取用户输入的起始和结束值,满足自定义区间的需求。
内容的提问来源于stack exchange,提问作者Diret
相关产品推荐
相关产品推荐

