{"record":{"id":"8bbf9429de8ee212","repo":"TheAlgorithms/Java","slug":"number-must-be-greater-than-zero-8bbf94","errorCode":null,"errorMessage":"Number must be greater than zero.","messagePattern":"Number must be greater than zero\\.","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"src/main/java/com/thealgorithms/maths/Prime/MobiusFunction.java","lineNumber":31,"sourceCode":" *\n * */\npublic final class MobiusFunction {\n    private MobiusFunction() {\n    }\n\n    /**\n     * This method returns μ(n) of given number n\n     *\n     * @param number Integer value which μ(n) is to be calculated\n     * @return  1 when number is less than or equals 1\n     *            or number has even number of prime factors\n     *          0 when number has repeated prime factor\n     *         -1 when number has odd number of prime factors\n     */\n    public static int mobius(int number) {\n        if (number <= 0) {\n            // throw exception when number is less than or is zero\n            throw new IllegalArgumentException(\"Number must be greater than zero.\");\n        }\n\n        if (number == 1) {\n            // return 1 if number passed is less or is 1\n            return 1;\n        }\n\n        int primeFactorCount = 0;\n\n        for (int i = 1; i <= number; i++) {\n            // find prime factors of number\n            if (number % i == 0 && PrimeCheck.isPrime(i)) {\n                // check if number is divisible by square of prime factor\n                if (number % (i * i) == 0) {\n                    // if number is divisible by square of prime factor\n                    return 0;\n                }\n                /*increment primeFactorCount by 1","sourceCodeStart":13,"sourceCodeEnd":49,"githubUrl":"https://github.com/TheAlgorithms/Java/blob/fdfb9a395b310167a66bd29e311e36e0e3e9b964/src/main/java/com/thealgorithms/maths/Prime/MobiusFunction.java#L13-L49","documentation":"Thrown by MobiusFunction.mobius(int number) when number <= 0. The Möbius function μ(n) is defined only for positive integers, so zero and negatives are out of domain. The guard fires before the special-case handling for n == 1 and the prime-factor loop.","triggerScenarios":"Calling mobius(0), mobius(-3), or any mobius(number) where number <= 0.","commonSituations":"User-supplied integer not validated for positivity; arithmetic expression (subtraction, decrement) crossing zero; loop bound off-by-one hitting 0; deserialized numeric field that accepted non-positive values.","solutions":["Validate number > 0 at the caller and reject or clamp before calling mobius.","Fix upstream arithmetic producing non-positive values.","Define domain-specific handling for 0/negatives before invoking the function."],"exampleFix":"// before\nint mu = MobiusFunction.mobius(n);\n\n// after\nif (n <= 0) {\n    throw new IllegalArgumentException(\"n must be > 0: \" + n);\n}\nint mu = MobiusFunction.mobius(n);","handlingStrategy":"validation","validationCode":"if (number <= 0) {\n    throw new IllegalArgumentException(\"number must be > 0: \" + number);\n}\nint mu = MobiusFunction.mobius(number);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Validate positive-integer inputs at the boundary before calling number-theory functions.","Audit arithmetic that produces inputs for non-positive results.","Treat 0 and negatives as domain errors for Möbius and related functions."],"tags":["math","number-theory","invalid-argument","non-positive"],"backgroundTag":null,"analyzedSha":"fdfb9a395b310167a66bd29e311e36e0e3e9b964","analyzedAt":"2026-08-13T23:36:13.315Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}