Bu eğitimde, bir sayının JavaScript'te asal olup olmadığını kontrol etmek için farklı yöntemlere bakalım ve bunların tam olarak nerede yararlı olduğunu anlayalım.

Bir asal sayı iki küçük doğal sayının çarpımı ile elde edilemez, 1 den büyük olan doğal sayılar olup. 1'den büyük diğer tüm asal olmayan doğal sayılara bileşik sayılar denir.

Yani kısaca kendisi ve 1'den başka hiçbir sayına bölünemeyen sayılara ASAL SAYI denir.1'den büyük olan ve Asal olmayan tüm sayılara da BİLEŞİK SAYI denir.

Asal sayı örnekleri: 2,3,5,7,11,13 vb. Bileşik sayı örnekleri: 4,6,8,9,10,12,14 vb.

JavaScript Nasıl Kontrol Ederiz?

Bunun için 4 farklı versiyon deneyeceğiz ve aralarında farklara değineceğim. 

Yol 1 : 
Bu sürüm çok yavaştır ve ancak en az sayıda kod satırına sahiptir. N'nin geçirilen değerin kareköküne kadar her tam sayıya bölünebilir olup olmadığını kontrol eder. Bunu yapmadan önce bir değerin NaN olup olmadığını kontrol eder. NaN değerleri, aritmetik işlemler tanımlanmamış veya sunulamayan değerlerle sonuçlandığında üretilir. Bunun için isNaN () işlevi kullanılır. Ayrıca isFinite () işlevini kullanarak iletilen değerin sonlu olup olmadığını kontrol eder.

//isPrime Javascript Version 1
function isPrime1(n) {
 if (isNaN(n) || !isFinite(n) || n%1 || n<2) return false;
 var m=Math.sqrt(n); //returns the square root of the passed value
 for (var i=2;i<=m;i++) if (n%i==0) return false;
 return true;
}</span><span id="4e50" class="de hk gb fc hl b db hp hq hr hs ht hn w ho">console.log(isPrime1(7)); //Output: True
console.log(isPrime1(6)); //Output: False</span>

Yol 2: 
Bu sürüm, ilkinden nispeten daha iyi. İlk önce geçirilen değerin çift sayı olup olmadığını kontrol eder. Bundan sonra, 3'ten geçirilen değerin kareköküne kadar sadece tek bölenleri kontrol etmeye devam eder. 3 ile aktarılan değerin karekökü arasındaki sayıların en fazla yarısı kontrol edilir.

//isPrime Javascript Version 2
function isPrime2(n) {
 if (isNaN(n) || !isFinite(n) || n%1 || n<2) return false;
 if (n%2==0) return (n==2);
 var m=Math.sqrt(n);
 for (var i=3;i<=m;i+=2) {
  if (n%i==0) return false;
 }
 return true;
}</span><span id="ce7e" class="de hk gb fc hl b db hp hq hr hs ht hn w ho">console.log(isPrime2(7)); //Output: True
console.log(isPrime2(6)); //Output: False</span>

Yol 3 : 
Bu sürüm daha da iyi. Döngüdeki diğer deviserleri kontrol etmeden önce, önceki sürümlere ek olarak aşağıdaki kontroller yapılır. Kontrol 1: Eğer n, 2 veya 3'e bölünebiliyorsa Kontrol 2: Yalnızca 3'ün katı olmayan tek bölenleri kontrol edin. Bu versiyonda, n'nin kareköküne kadar bölenlerin en az üçte ikisi elenir (yani Tümü 2 ve 3'ün katları elenir)

//isPrime Javascript Version 3
function isPrime3(n) {
 if (isNaN(n) || !isFinite(n) || n%1 || n<2) return false;
 if (n%2==0) return (n==2);
 if (n%3==0) return (n==3);
 var m=Math.sqrt(n);
 for (var i=5;i<=m;i+=6) {
  if (n%i==0)     return false;
  if (n%(i+2)==0) return false;
 }
 return true;
}</span><span id="6e16" class="de hk gb fc hl b db hp hq hr hs ht hn w ho">console.log(isPrime3(7)); //Output: True
console.log(isPrime3(6)); //Output: False</span>

Yol 4 : 

Bu, tüm sürümlerin en hızlısıdır. Döngüde 2 ve 3'e ek olarak 5'in katları da ortadan kalkar. Bunun sonucu, 2 ile n'nin karekökü arasındaki maksimum çeyrek sayıları kontrol etmemiz olacaktır.

//isPrime Javascript Version 4
isPrime = function(n) {
 if (isNaN(n) || !isFinite(n) || n%1 || n<2) return false;
 if (n==leastFactor(n)) return true;
 return false;
}</span><span id="9604" class="de hk gb fc hl b db hp hq hr hs ht hn w ho">leastFactor = function(n){
 if (isNaN(n) || !isFinite(n)) return NaN;
 if (n==0) return 0;
 if (n%1 || n*n<2) return 1;
 if (n%2==0) return 2;
 if (n%3==0) return 3;
 if (n%5==0) return 5;
 var m = Math.sqrt(n);
 for (var i=7;i<=m;i+=30) {
  if (n%i==0)      return i;
  if (n%(i+4)==0)  return i+4;
  if (n%(i+6)==0)  return i+6;
  if (n%(i+10)==0) return i+10;
  if (n%(i+12)==0) return i+12;
  if (n%(i+16)==0) return i+16;
  if (n%(i+22)==0) return i+22;
  if (n%(i+24)==0) return i+24;
 }
 return n;
}</span><span id="f0df" class="de hk gb fc hl b db hp hq hr hs ht hn w ho">console.log(isPrime(7)); //Output: True
console.log(isPrime(6)); //Output: False</span>

Umarım işinize yarar. Takipte kalmayı unutmayın...