Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
59
Task/Lucas-Lehmer-test/JavaScript/lucas-lehmer-test.js
Normal file
59
Task/Lucas-Lehmer-test/JavaScript/lucas-lehmer-test.js
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
////////// In JavaScript we don't have sqrt for BigInt - so here is implementation
|
||||
function newtonIteration(n, x0) {
|
||||
const x1 = ((n / x0) + x0) >> 1n;
|
||||
if (x0 === x1 || x0 === (x1 - 1n)) {
|
||||
return x0;
|
||||
}
|
||||
return newtonIteration(n, x1);
|
||||
}
|
||||
|
||||
function sqrt(value) {
|
||||
if (value < 0n) {
|
||||
throw 'square root of negative numbers is not supported'
|
||||
}
|
||||
|
||||
if (value < 2n) {
|
||||
return value;
|
||||
}
|
||||
return newtonIteration(value, 1n);
|
||||
}
|
||||
////////// End of sqrt implementation
|
||||
|
||||
function isPrime(p) {
|
||||
if (p == 2n) {
|
||||
return true;
|
||||
} else if (p <= 1n || p % 2n === 0n) {
|
||||
return false;
|
||||
} else {
|
||||
var to = sqrt(p);
|
||||
for (var i = 3n; i <= to; i += 2n)
|
||||
if (p % i == 0n) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
function isMersennePrime(p) {
|
||||
if (p == 2n) {
|
||||
return true;
|
||||
} else {
|
||||
var m_p = (1n << p) - 1n;
|
||||
var s = 4n;
|
||||
for (var i = 3n; i <= p; i++) {
|
||||
s = (s * s - 2n) % m_p;
|
||||
}
|
||||
return s === 0n;
|
||||
}
|
||||
}
|
||||
|
||||
var upb = 5000;
|
||||
var tm = Date.now();
|
||||
console.log(`Finding Mersenne primes in M[2..${upb}]:`);
|
||||
console.log('M2');
|
||||
for (var p = 3n; p <= upb; p += 2n){
|
||||
if (isPrime(p) && isMersennePrime(p)) {
|
||||
console.log("M" + p);
|
||||
}
|
||||
}
|
||||
console.log(`... Took: ${Date.now()-tm} ms`);
|
||||
Loading…
Add table
Add a link
Reference in a new issue