sum Of Proper Divisors - Java java.lang

Java examples for java.lang:Math Function

Description

sum Of Proper Divisors

Demo Code

/**/*  w w  w . jav  a  2  s . c  o  m*/
 *
 * maer - Solutions to problems of Project Euler
 * Copyright (C) 2011, Sandeep Gupta
 * http://www.sangupta.com/projects/maer
 *
 * The file is licensed under the the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */
//package com.java2s;

public class Main {
    public static long sumOfProperDivisors(long num) {
        if (num == 1) {
            return 0;
        }

        long sum = 1; // as 1 is a divisor and we are considering proper divisors
        long root = (long) Math.sqrt((double) num);

        if (root * root == num) {
            // case that n is a perfect square
            sum += root;
            root -= 1;
        }

        if (isOdd(num)) {
            for (int i = 2; i <= root; i += 2) {
                if (num % i == 0)
                    sum += i + num / i;
            }
        } else {
            // number is even
            for (int i = 2; i <= root; i += 1) {
                if (num % i == 0)
                    sum += i + num / i;
            }
        }

        return sum;
    }

    /**
     * Tests whether the given number is odd or not, uses bit arithmetic.
     * 
     * @param number
     * @return
     */
    public static boolean isOdd(long number) {
        return (number & 1) == 1;
    }
}

Related Tutorials