Rosetta Code Challenges - Factors of a Mersenne number

Tell us what’s happening:

Yes these strings are not returning I believe I returned maybe one but I don’t know how to return multiple strings. Here is the problem I keep receiving , 3. check_mersenne(3) should return the string M3 = 2^3-1 is prime.
Failed:4. check_mersenne(23) should return the string M23 = 2^23-1 is composite with factor 47.
Failed:5. check_mersenne(929) should return the string M929 = 2^929-1 is composite with factor 13007.
Is there any example on how to return strings in Free Code Camp.

Your code so far

function modPow(base, exponent, modulus) {
    let result = 1;
    base = base % modulus;
    while (exponent > 0) {
        if (exponent % 2 === 1) {
            result = (result * base) % modulus;
        }
        exponent = Math.floor(exponent / 2);
        base = (base * base) % modulus;
    }
    return result;
}

function findFactorOfMersenneNumber(P) {
    const mersenneNumber = (1 << P) - 1; // 2^P - 1
    const sqrtMersenne = Math.sqrt(mersenneNumber);

    for (let k = 1; ; k++) {
        const q = 2 * k * P + 1;
        if (q > sqrtMersenne) {
            break;
        }
        if (q % 8 === 1 || q % 8 === 7) {
            if (modPow(2, P, q) === 1) {
                return q;
            }
        }
    }

    return null; // No factor found
}

function check_mersenne(P) {
    if (P < 2) {
        return `M${P} = 2^${P}-1 is not a valid Mersenne number.`;
    }

    const factor = findFactorOfMersenneNumber(P);
    if (factor) {
        return `M${P} = 2^${P}-1 is composite with factor ${factor}.`;
    } else {
        return `M${P} = 2^${P}-1 is prime.`;
    }
}

// Example usage:
console.log(check_mersenne(3));   // M3 = 2^3-1 is prime.
console.log(check_mersenne(23));  // M23 = 2^23-1 is composite with factor 47.
console.log(check_mersenne(929)); // M929 = 2^929-1 is composite with factor 13007.

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0

Challenge Information:

Rosetta Code Challenges - Factors of a Mersenne number

you’re already returning a string here but the string should not have a period at the end

Tell us what’s happening:

I got all test to pass except for one the final test will not run . Is there a way you can look over my code and explain to me where I went wrong and break it down for me in laymen terms.

Your code so far

function check_mersenne(p) {
    // Calculate the Mersenne number
    const mersenneNumber = BigInt(Math.pow(2, p) - 1);

    // Function to check if a number is prime
    function isPrime(n) {
        if (n <= 1n) return false;
        if (n <= 3n) return true;
        if (n % 2n === 0n || n % 3n === 0n) return false;
        for (let i = 5n; i * i <= n; i += 6n) {
            if (n % i === 0n || n % (i + 2n) === 0n) return false;
        }
        return true;
    }

    // Check if the Mersenne number is prime
    if (isPrime(mersenneNumber)) {
        return `M${p} = 2^${p}-1 is prime`;
    } else {
        // Find a factor of the Mersenne number
        for (let i = 2n; i * i <= mersenneNumber; i++) {
            if (mersenneNumber % i === 0n) {
                return `M${p} = 2^${p}-1 is composite with factor ${i}`;
            }
        }
        return `M${p} = 2^${p}-1 is composite`;
    }
}

// Test the function
console.log(check_mersenne(3));   // M3 = 2^3-1 is prime.
console.log(check_mersenne(23));  // M23 = 2^23-1 is composite with factor 47.
console.log(check_mersenne(929)); // M929 = 2^929-1 is composite with factor 13007.

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0

Challenge Information:

Rosetta Code Challenges - Factors of a Mersenne number

Tell us what’s happening:

Everything else is returning except for this last return statement . Can you explain how to fit and return this last statement into my code here is the return statement 5. check_mersenne(929) should return the string M929 = 2^929-1 is composite with factor 13007. You were right about getting rid of the period at the end of the last four statements but the fifth statement is not returning do you have any suggestions.

Your code so far

function check_mersenne(p) {
    // Calculate the Mersenne number
    const mersenneNumber = BigInt(Math.pow(2, p) - 1);

    // Function to check if a number is prime
    function isPrime(n) {
        if (n <= 1n) return false;
        if (n <= 3n) return true;
        if (n % 2n === 0n || n % 3n === 0n) return false;
        for (let i = 5n; i * i <= n; i += 6n) {
            if (n % i === 0n || n % (i + 2n) === 0n) return false;
        }
        return true;
    }

    // Check if the Mersenne number is prime
    if (isPrime(mersenneNumber)) {
        return `M${p} = 2^${p}-1 is prime`;
    } else {
        // Find a factor of the Mersenne number
        for (let i = 2n; i * i <= mersenneNumber; i++) {
            if (mersenneNumber % i === 0n) {
                return `M${p} = 2^${p}-1 is composite with factor ${i}`;
            }
        }
        return `M${p} = 2^${p}-1 is composite`;
    }
}

// Test the function
console.log(check_mersenne(3));   // M3 = 2^3-1 is prime.
console.log(check_mersenne(23));  // M23 = 2^23-1 is composite with factor 47.
console.log(check_mersenne(929)); // M929 = 2^929-1 is composite with factor 13007.

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0

Challenge Information:

Rosetta Code Challenges - Factors of a Mersenne number

This is going to be a very slow loop. Your isPrime function could return the divisor it found so you don’t need to use this loop

Also, it’s generally better to use i <= sqrt_n so you don’t need to do any computations to do the comparison