// ---- // Sass (v3.3.9) // Compass (v1.0.0.alpha.20) // ---- // Prime number // https://en.wikipedia.org/wiki/Prime_number // Returns whether `$n` is a prime number. // --- // @param {number} $n // --- // @return {bool} @function is-prime($n) { @if type-of($n) != number { @warn "#{$n} is not a number for `is-prime`."; @return null; } @if $n < 2 or $n != floor($n) { @return false; } @if $n % 2 == 0 { @return $n == 2; } @if $n % 3 == 0 { @return $n == 3; } $i: 5; $m: ceil(sqrt($n)); @while $i <= $m { @if $n % $i == 0 or $n % ($i + 2) == 0 { @return false; } $i: $i + 6; } @return true; } // Returns the factorial of a non-negative integer. // --- // @param {number} $n: a non-negative integer // --- // @return {number} @function fact($n) { @if $n < 0 or $n != floor($n) { @warn "#{$n} is not a positive integer for `fact`."; @return null; } $ret: 1; @while $n > 0 { $ret: $ret * $n; $n: $n - 1; } @return $ret; } // Returns whether `$n` is a prime number. // --- // @param {number} $n // --- // @return {bool} @function _is-prime($n) { @if type-of($n) != number { @warn "#{$n} is not a number for `is-prime`."; @return null; } @if $n < 2 or $n != floor($n) { @return false; } @return fact($n - 1) % $n == $n - 1; } // Tests is-prime { $fixture: ( 7: true, 10: false, 37: true, 60: false, 373: true, 390: false, 1427: true, 1683: false, 7879: true, 7881: false, // 2011: true, // 9007199254740881: true ); $tests: ''; @each $num, $bool in $fixture { $pass: is-prime($num) == $bool; $tests: $tests + if($pass, '✔ ', 'X '); } is-prime: $tests; $tests: ''; @each $num, $bool in $fixture { $pass: _is-prime($num) == $bool; $tests: $tests + if($pass, '✔ ', 'X '); } _is-prime: $tests; }