Java(完全数计算)

完全数计算

http://www.nowcoder.com/questionTerminal/7299c12e6abb437c87ad3e712383ff84

import java.util.Scanner;

public class Main{
   public static void main(String[] args){
       Scanner in = new Scanner(System.in);
       while(in.hasNextInt()){
           int n = in.nextInt();
           
           //第一个完全数是6,若小于6则输出0
           if(n < 6){
               System.out.println(0);
               continue;
           }
           
           int count = 0;    //计数变量
           for(int t=6; t <= n; t++){
               int sum = 0;
               //统计因数的和,计数到该数的1/2即可
               for(int i=1; i <= t/2; i++){
                   if(t%i == 0)
                       sum += i;
               }
               if(sum == t)
                   count++;
           }
           
           //输出结果
           System.out.println(count);
       }
   }
}

全部评论
一个整数的最大因子,小于等于该数的二分之一
9 回复 分享
发布于 2021-12-26 23:56
这个解法为什么不超时
1 回复 分享
发布于 2022-04-05 23:23
for (int j = 2 ; j <=Math.sqrt(i) ;j ++){ if(i%j ==0){ sum += j ; sum += i/j; } }
点赞 回复 分享
发布于 2024-08-05 18:10 北京
可以优化一下,只循环到t的平方根,sum每次同时加上商和除数就行,如果i=1或i*i=t,sum就只加i,否则就同时加上i和t/i。。。。“if (i*i==t||i== 1) {sum = sum+ i; } else {sum = sum + i + t/i; }”
点赞 回复 分享
发布于 2023-03-23 16:15 湖南
主要是暴力破解法清晰明了,你得先懂最简单的,你才能够做到更好
点赞 回复 分享
发布于 2023-03-17 11:45 广东
不需要到该数的1/2,到平方根就行,同时加除数和商就行,只需要加之前判断是否是平方根(if(i*i!=n){sum+=(t/i);})
点赞 回复 分享
发布于 2022-12-13 22:50 江苏
清爽
点赞 回复 分享
发布于 2022-10-21 21:47 江苏
懂了
点赞 回复 分享
发布于 2022-02-11 14:49
100/10,余数也是10,sum不应该添加两次10吗
点赞 回复 分享
发布于 2022-02-11 13:46
为什么是1/2呢?有什么原因吗?
点赞 回复 分享
发布于 2021-10-11 18:25

相关推荐

见见123:简历没有啥问题,是这个社会有问题。因为你刚毕业,没有工作经历,现在企业都不要没有工作经历的。社会病了。
点赞 评论 收藏
分享
评论
30
8
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务