原题链接:[编程入门]完数的判断
解题思路:
看注释,在座的各位有志青年!
注意事项:
参考代码:
import java.util.Arrays; import java.util.HashSet; import java.util.Scanner; /** * @Author:杨雨彤 * @date:2024/1/9 20:42 */ public class daydayone { public static void main(String[] args) { Scanner scan=new Scanner(System.in); int N=scan.nextInt(); for (int i = 2; i <=N ; i++) { HashSet<Integer>hs=new HashSet<>();//HashSet集合 元素不可重,非常适用 hs.add(1);//1是所有数的因子,默认添加进去 int sum=0;//记录所有因子之和 for (int j = 2; j*j<=i ; j++) {//找i的所有因子,因为1已经加进hs里了,所以因子从2开始找, //因为找到一个其实也就找到另一个,所以j小于等于根号下i就可以了 //另一半不要继续找咯 if(i%j==0){//如果是i的因子 hs.add(j);//加进集合里 hs.add(i/j);//同时把另一个因子也加进去 } } for (Integer a:hs) { sum+=a;//遍历集合中所有因子并加和 } Object[] array= hs.toArray();//因为hs集合中元素顺序不是递增的,所以先转成数组,再排个序 Arrays.sort(array);//快排 哈哈不会有人以为我要手写冒泡排序吧,拜托大家就是成熟的敲字工了,谁还不会点偷鸡方法呀 if(sum==i){//如何i是完数 System.out.print(i+" its factors are "); for (int j = 0; j < array.length ; j++) { System.out.print(array[j]+" "); } System.out.println(); } } } }
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复