Prime Arrangements

EasyMath

Solution

export function numPrimeArrangements(n: number): number {
  const MOD = 10 ** 9 + 7;
  const isPrime = (n: number) => {
    if (n === 1) {
      return false;
    }
    for (let num = 2; num <= Math.sqrt(n); num++) {
      if (n % num === 0) {
        return false;
      }
    }
    return true;
  };
 
  let answer = 1;
  let [prime, nonPrime] = [0, 0];
  for (let num = 1; num <= n; num++) {
    if (isPrime(num)) {
      prime += 1;
      answer *= prime;
    } else {
      nonPrime += 1;
      answer *= nonPrime;
    }
    answer %= MOD;
  }
 
  return answer;
}