mathball
Version:
A JavaScript library for Competitive Programming
33 lines (29 loc) • 623 B
JavaScript
;
/* 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);
};