UNPKG

mathball

Version:

A JavaScript library for Competitive Programming

33 lines (29 loc) 623 B
'use strict'; /* Carmichael Number * Function: isCarmichael() */ var validate = require('../validation/positive-integer'); var prime = require('../prime').check; function squarefree(i) { for (var k = 2; k <= Math.sqrt(i) && i % k !== 0 && i / k % k !== 0; k++) { return true; } } function isCarmichael(n) { var c = 0; for (var i = 1; i <= n; i++) { if (n % i == 0) { if (prime(i) && (n - 1) % (i - 1) == 0) { c++; if (c >= 3 && i % 2 != 0 && squarefree(i)) { return true; } } } } return false; } exports.check = function (n) { validate(n, 'isCarmichael'); return isCarmichael(n); };