简单的质因数分解题目Java

题目:链接:https://ac.nowcoder.com/acm/contest/8997/A
来源:牛客网

若一个数除了自己本身以外,所有因子之和等于它自己,那么称这个数为“完全数”。
例如,6的因子有1,2,3,6,1+2+3=6,所以6是完全数。
而8的因子有1,2,4,8,1+2+4=7,所以8不是完全数。
同样的,我们定义:若一个数除了自己本身以外,所有因子之和大于它自己,那么称这个数为“过剩数”,例如12。
若一个数除了自己本身以外,所有因子之和小于它自己,那么称这个数为“不足数”,例如8。
输入一个数,判断它是完全数、过剩数还是不足数。

``

public static void main(String[] args) {
   int sum = 1;
   Scanner sc = new Scanner(System.in);
   long x = sc.nextLong();
   for (int i = 2; i< Math.sqrt(x); i++) {
       if (x % i == 0) {
           sum+=i;
           sum+=x/i;
       }
   }
    if(Math.sqrt(x)-(int)Math.sqrt(x) < 10e-6) {
        sum+=(int)Math.sqrt(x);
    }

   if (sum == x) {
       System.out.println("Pure");
   } else if (sum < x) {
       System.out.println("Early");
   } else {
       System.out.println("Late");
   }
}

出错点:

​ 1、sum 的类型定义,数据规模达到了10e14,所以要使用long类型

​ 2、i < Math.sqrt(x)的判断上,一开始使用i * i < x 的方式处理,但是忽略了i的类型,i * i的结果越界,出现了超时错误。

注意点:

1、如果输入的数据是一个完全平方数,那么,使用i < Math.sqrt(x)就少加一个Math.sqrt(x),

使用i <= Math.sqrt(x)就多加一个Math.sqrt(x),所以需要额外的进行一个判断处理。

2、 Math.sqrt(x)的返回结果是一个double型的数据,不可以直接用 == 运算符比较。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值