【奇技淫巧】利用正則進行須要整除操做的判斷,如:奇偶性,質數合數

利用正則表達式能夠來進行某些須要整除操做的判斷,例如:奇偶性,質數合數等。javascript

PS:本文建議有必定正則基礎的看,須要瞭解基本的正則,回溯,貪心等。java

奇偶性

判斷偶數:首先把數字n轉化爲重複n次1的字符串,而後經過正則的匹配判斷該字符串是不是多個或則0個(0也是偶數)重複的11字符串。正則表達式

function isEven(n) {
  return /^(11)*$/.test('1'.repeat(n));
}

isEven(0); // true
isEven(1); // false
isEven(2); // true

PS:固然,因爲repeat的緣由僅限於非負整數的判斷。code

判斷奇數:奇數和偶數互逆,加一個非就好了。ip

function isOdd(n) {
  return !/^(11)*$/.test('1'.repeat(n));
}

isEven(0); // false
isEven(1); // true
isEven(2); // false

質數合數

判斷合數:同上轉換爲字符串。而後經過正則匹配是否由2個及以上重複的字符串'11...'(1的個數也必須是2個及以上,能被1整除的不必定是合數)。字符串

function isNotPrime(n) {
  return /^(11+?)\1+$/.test('1'.repeat(n))
}
isNotPrime(0); isNotPrime(1); isNotPrime(2); isNotPrime(3); isNotPrime(5); // false  
isNotPrime(4); isNotPrime(6); isNotPrime(8); isNotPrime(9); isNotPrime(10); // true

判斷質數:質數和合數在除開0,1的狀況下的天然數來看是互逆的,那麼只須要給0,1特殊處理便可。io

function isPrime(n) {
  return !/^1?$|^(11+?)\1+$/.test('1'.repeat(n))
}

isPrime(2); isPrime(3); isPrime(5); isPrime(7); isPrime(11); isPrime(13);// true  
isPrime(0); isPrime(1);isPrime(4); isPrime(6); isPrime(8); isPrime(9); isPrime(10); // false
相關文章
相關標籤/搜索