Original: JS Regular detection primes
I believe a lot of people should have read this article, the first time I saw it was 11, when I learned to read this question.
The original "Regular expression of the number of prime checks", in the article has explained how he judged, I will not wordy.
Let's say how JS implements it.
First of all to see what is prime, in the "prime-Baidu Encyclopedia," There are detailed instructions, but also said some of the methods of the prime, what 6n+1 law, etc...
None of these algorithms are what we're talking about, we're just talking about regular.
The regular in that article is /^1?$|^ (11+?) \1+$/
In fact, I feel that there is absolutely no need to detect 0 1 or the like, because according to Baidu Encyclopedia, the prime number is from 2 start.
So just add a judgment condition N < 2 is not a prime number, others are /^ (11+?). \1+$/ for verification,
Not only improves efficiency, but also prevents the error of passing in negative numbers.
Let's start by writing a function that iterates through n primes.
/** * ergodic Prime number * @param {number} max traverse the prime number between 2-max * @return {Array} returns 2-max all primes between */function prime (max) { var Re = new RegExp (' ^ (11+?) \\1+$ '),//Detect prime number regular str = ' 1 ',//based on current I generated corresponding numbers 1 i = 1,//counter ret = [];//prime number Result set while (Max > i++)
re.test (str + = ' 1 ') | | Ret.push (i); return ret;} var arr = prime (+); Console.log (arr);
Found in the code var re = new RegExp (' ^ (11+?) \\1+$ ') why not directly write var re =/^ (11+?) Where's \1+$/?
Go back and turn down some of the regular articles I wrote and I'll find the answer.
The most traditional notation is often nested loops to traverse primes, but with regular help, the code is simple and elegant.
If you want to judge the prime number, it is more concise.
/** * Determines whether a prime number * @param {#} n is to be judged as a digit * @return {Boolean} returns true|false */function isprime (n) { return N < 2? False:!/^ (11+?) \1+$/.test (Array (n + 1). Join (' 1 '));} Console.log ( -2, IsPrime ( -2)), Console.log (1, IsPrime (1)), Console.log (2, IsPrime (2)), Console.log (One, IsPrime (11));
Well, today's share of this thing, although no practical use, but can broaden everyone's horizons.
The regular is not only the match string, but also can judge the prime number, two Yuan/ternary equation has no solution and so on and so on seemingly incredible logic.