* feat(tools): add seed/solution restore script * chore(curriculum): remove empty sections' markers * chore(curriculum): add seed + solution to Chinese * chore: remove old formatter * fix: update getChallenges parse translated challenges separately, without reference to the source * chore(curriculum): add dashedName to English * chore(curriculum): add dashedName to Chinese * refactor: remove unused challenge property 'name' * fix: relax dashedName requirement * fix: stray tag Remove stray `pre` tag from challenge file. Signed-off-by: nhcarrigan <nhcarrigan@gmail.com> Co-authored-by: nhcarrigan <nhcarrigan@gmail.com>
2.4 KiB
2.4 KiB
id, title, challengeType, forumTopicId, dashedName
id | title | challengeType | forumTopicId | dashedName |
---|---|---|---|---|
5eb3e4aa847216613aa81983 | Semiprime | 5 | 385318 | semiprime |
--description--
Semiprime numbers are natural numbers that are products of exactly two (possibly equal) prime numbers.
1679 = 23 x 73
--instructions--
Write a function that returns true if a number is semiprime, or false if it is not.
--hints--
isSemiPrime
should be a function.
assert(typeof isSemiPrime === 'function');
isSemiPrime(100)
should return a boolean.
assert(typeof isSemiPrime(100) === 'boolean');
isSemiPrime(100)
should return false
.
assert.equal(isSemiPrime(100), false);
isSemiPrime(504)
should return false
.
assert.equal(isSemiPrime(504), false);
isSemiPrime(4)
should return true
.
assert.equal(isSemiPrime(4), true);
isSemiPrime(46)
should return true
.
assert.equal(isSemiPrime(46), true);
isSemiPrime(13)
should return false
.
assert.equal(isSemiPrime(13), false);
isSemiPrime(74)
should return true
.
assert.equal(isSemiPrime(74), true);
isSemiPrime(1679)
should return true
.
assert.equal(isSemiPrime(1679), true);
isSemiPrime(2)
should return false
.
assert.equal(isSemiPrime(2), false);
isSemiPrime(95)
should return true
.
assert.equal(isSemiPrime(95), true);
isSemiPrime(124)
should return false
.
assert.equal(isSemiPrime(124), false);
--seed--
--seed-contents--
function isSemiPrime(n) {
}
--solutions--
function isSemiPrime(n) {
if (n <= 3) return false;
var ans = [];
var done = false;
while (!done) {
if (n % 2 === 0) {
ans.push(2);
n /= 2;
continue;
}
if (n % 3 === 0) {
ans.push(3);
n /= 3;
continue;
}
if (n === 1) return ans.length == 2;
var sr = Math.sqrt(n);
done = true;
// try to divide the checked number by all numbers till its square root.
for (var i = 6; i <= sr; i += 6) {
if (n % (i - 1) === 0) {
// is n divisible by i-1?
ans.push(i - 1);
n /= i - 1;
done = false;
break;
}
if (n % (i + 1) === 0) {
// is n divisible by i+1?
ans.push(i + 1);
n /= i + 1;
done = false;
break;
}
}
}
ans.push(n);
return ans.length == 2;
}