Recent posts

Recent comments

Archive

Calender

«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

최종 수정일 : 2016. 11. 15.


[ Javascript ] prime number & composite number


소수 ( prime number )

1보다 큰 수 중에서, 1과 그 자신외에는 약수를 가지지 않는 자연수.
1과 자기 자신 외에는 나눌 수 없는 숫자. 더 이상 분해할 수 없는 수.
A natural number greater than 1 that has no positive divisors other than 1 and itself.

2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, ...


합성수 ( composite number )

소수가 아닌 자연수. 1과 그 자신 이외의 수를 약수로 가지는 자연수.
합성수는 소수로 나눌 수 있다.
A natural number greater than 1 that is not a prime number.
A positive integer that can be formed by multiplying together two smaller positive integers.
A positive integer that has at least one divisor other than 1 and itself.

4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22, 24, 25, 26, ...


1은 소수도, 합성수도 아니다. ( Number 1 is neither prime nor composite. )

Why is the number one not prime? (The Prime Pages)
Prime number - Primality of one (Wikipedia)





isPrimeNumber()

 
// source : https://tonks.tistory.com/171#_javascript_prime_&_composite 

function isPrimeNumber ( number ){ 
     var floor = Math.floor( number ); 
     if ( isNaN(floor) || floor == Infinity || floor != number || floor < 2 ){ 
          return false; 
     } 

     var floorSqrt = Math.floor( Math.sqrt( floor ) ); 
     var x = 2; 

     for ( x; x <= floorSqrt; x++ ){  if ( floor % x == 0 ) return false; } 

     return true; 
} 
 
 
<button onclick="testing()"> Click me </button>

<p id="demo1"> </p>

<script type="text/javascript">

function testing (){ 

     var number = "47"; 

     var check = isPrimeNumber( number ); 

     demo1.innerHTML = check; 
} 
</script>
 
<button onclick="testing()"> Click me </button>

<p id="demo2"> </p>

<script type="text/javascript">

function testing (){ 

     var number = 48; 

     var check = isPrimeNumber( number ); 

     demo2.innerHTML = check; 
} 
</script>



isPrimeNumber() & getPrimes()

 
function getPrimes ( max, min ){ 
     var primes = [ ]; 

     if ( isNaN(max) ){  return primes;  } 

     var min = Number( min ) || 2; 
     var max = Number( max ); 

     if ( min > max ){ 
          var temp = min; 
               min = max; 
               max = temp; 
     } 

     min = Math.ceil( min ); 
     max = Math.floor( max ); 

     if ( max < 2 ){  return primes;  } 
     if ( min < 2 ){  min = 2;  } 

     /* 
      * 생성되는 배열의 최대 길이를 100,000으로 설정함. 
      * I've set up the maximum length of a returning array to the 100,000. 
     */ 
     var limit = Math.pow( 10, 5 ); 

     for ( min; min <= max; min++ ){ 
          if ( primes.length === limit ){  return primes;  } 

          if ( isPrimeNumber( min ) ){  primes.push( min );  } 
     } 

     return primes; 
} 
 
 
<button onclick="testing()"> Click me </button>

<p id="demo1"> </p>

<script type="text/javascript">

function testing (){ 

     var array = getPrimes( 19.4 ); 

     demo1.innerHTML = array.join( ", " ); 
} 
</script>
 
<button onclick="testing()"> Click me </button>

<p id="demo2"> </p>

<script type="text/javascript">

function testing (){ 

     var array = getPrimes( 19.7 ); 

     demo2.innerHTML = array.join( ", " ); 
} 
</script>

 
<button onclick="testing()"> Click me </button>

<p id="demo1"> </p>

<script type="text/javascript">

function testing (){ 

     var array = getPrimes( "3", 17 ); 

     demo1.innerHTML = array.join( ", " ); 
} 
</script>
 
<button onclick="testing()"> Click me </button>

<p id="demo2"> </p>

<script type="text/javascript">

function testing (){ 

     var array = getPrimes( "17", 3 ); 

     demo2.innerHTML = array.join( ", " ); 
} 
</script>


한번 실행될 때 만들어지는 소수의 갯수는 최대 10만 개까지 가능함.
The prime numbers of creating, are up to 100,000 per one time.


 
<button onclick="testing()"> Click me </button>

<div id="demo"> </div>

<script type="text/javascript">

function testing (){ 

     var arr = getPrimes( 1299800 ); 
     var last = arr.length - 1; 

     var text = arr[0] + ", " + arr[1] + ", " + arr[2] + ", " + arr[3] + ", " + arr[4] + ", " + arr[5] + ", " + arr[6] + ", " + arr[7] + ", "; 
          text += "... 중간 생략 (omitting this part from array) ... , "; 
          text += arr[ last-2 ] + ", " + arr[ last-1 ] + ", " + arr[ last ]; 

     demo.innerHTML = text; 
} 
</script>
 
 

 
<button onclick="testing()"> Click me </button>

<p id="demo"> </p>

<script type="text/javascript">

function testing (){ 

     var array = getPrimes( 1299670, 1299800 ); 

     demo.innerHTML = array.join( ", " ); 
} 
</script>
 



isPrimeNumber() & choosePrimes()

 
function choosePrimes ( array ){ 

     var primes = [ ]; 
     var n = 0, value; 

     for ( n; n < array.length; n++ ){ 
          value = array[ n ]; 

          if ( isPrimeNumber( value ) ){  primes.push( value );  } 
     } 

     return primes; 
} 
 
 
<button onclick="testing()"> Click me </button>

<p id="demo"> </p>

<script type="text/javascript">

function testing (){ 

     var myArray = [ 1, 2, 3, 4, 5, 6, 7 ]; 

     var array = choosePrimes ( myArray ); 

     demo.innerHTML = array.join( ", " ); 
} 
</script>
 



isCompositeNumber()

 
function isCompositeNumber ( number ){ 
     var floor = Math.floor( number ); 
     if ( isNaN(floor) || floor == Infinity || floor != number || floor < 4 ){ 
          return false; 
     } 

     var floorSqrt = Math.floor( Math.sqrt( floor ) ); 
     var x = 2; 

     for ( x; x <= floorSqrt; x++ ){  if ( floor % x == 0 ) return true; } 

     return false; 
} 
 
 
<button onclick="testing()"> Click me </button>

<p id="demo1"> </p>

<script type="text/javascript">

function testing (){ 

     var number = 47; 

     var check = isCompositeNumber( number ); 

     demo1.innerHTML = check; 
} 
</script>
 
<button onclick="testing()"> Click me </button>

<p id="demo2"> </p>

<script type="text/javascript">

function testing (){ 

     var number = "48"; 

     var check = isCompositeNumber( number ); 

     demo2.innerHTML = check; 
} 
</script>



isCompositeNumber() & getComposites()

 
function getComposites ( max, min ){ 
     var composites = [ ]; 

     if ( isNaN(max) ){  return composites;  } 

     var min = Number( min ) || 4; 
     var max = Number( max ); 

     if ( min > max ){ 
          var temp = min; 
               min = max; 
               max = temp; 
     } 

     min = Math.ceil( min ); 
     max = Math.floor( max ); 

     if ( max < 4 ){  return composites;  } 
     if ( min < 4 ){  min = 4;  } 

     /* 
      * 생성되는 배열의 최대 길이를 100,000으로 설정함. 
      * I've set up the maximum length of a returning array to the 100,000. 
     */ 
     var limit = Math.pow( 10, 5 ); 

     for ( min; min <= max; min++ ){ 
          if ( composites.length === limit ){  return composites;  } 

          if ( isCompositeNumber( min ) ){  composites.push( min );  } 
     } 

     return composites; 
} 
 
 
<button onclick="testing()"> Click me </button>

<p id="demo1"> </p>

<script type="text/javascript">

function testing (){ 

     var array = getComposites( 18.4 ); 

     demo1.innerHTML = array.join( ", " ); 
} 
</script>
 
<button onclick="testing()"> Click me </button>

<p id="demo2"> </p>

<script type="text/javascript">

function testing (){ 

     var array = getComposites( 18.7 ); 

     demo2.innerHTML = array.join( ", " ); 
} 
</script>

 
<button onclick="testing()"> Click me </button>

<p id="demo1"> </p>

<script type="text/javascript">

function testing (){ 

     var array = getComposites( 8, 21 ); 

     demo1.innerHTML = array.join( ", " ); 
} 
</script>
 
<button onclick="testing()"> Click me </button>

<p id="demo2"> </p>

<script type="text/javascript">

function testing (){ 

     var array = getComposites(  8.4,  21.7  ); 

     demo2.innerHTML = array.join( ", " ); 
} 
</script>


 
<button onclick="testing()"> Click me </button>

<div id="demo"> </div>

<script type="text/javascript">

function testing (){ 

     var array = getComposites( 45 ); 

     var n = 0; 
     var length = array.length; 
     var table = "<table border='1' cellspacing='0'><tbody><tr>"; 
     var td = ""; 

     for ( n; n < length; n++ ){ 

          td = "<td style='padding: 4px;text-align: right;'>" + array[ n ] + "</td>"; 
          if ( (n+1) % 10 == 0 ){  td += "</tr>";  } 

          table += td; 
     } 

     table += "</tbody></table>"; 

     demo.innerHTML = table; 
} 
</script>
 
 



isCompositeNumber() & chooseComposites()

 
function chooseComposites ( array ){ 

     var composites = [ ]; 
     var n = 0, value; 

     for ( n; n < array.length; n++ ){ 
          value = array[ n ]; 

          if ( isCompositeNumber( value ) ){  composites.push( value );  } 
     } 

     return composites; 
} 
 
 
<button onclick="testing()"> Click me </button>

<p id="demo"> </p>

<script type="text/javascript">

function testing (){ 

     var myArray = [ 1, 2, 3, 4, 5, 6, 7 ]; 

     var array = chooseComposites ( myArray ); 

     demo.innerHTML = array.join( ", " ); 
} 
</script>
 


 
<script type="text/javascript">
// source : https://tonks.tistory.com/171#_javascript_prime_&_composite 

var NaturalNumber = { 

     limit : Math.pow( 10, 5 ), // 100,000 

     setRange : function ( a, b, minimum ){ 
          var min = Number( a ) || minimum; 
          var max = Number( b ); 

          if ( min > max ){ 
               var temp = min; 
                    min = max; 
                    max = temp; 
          } 

          min = Math.ceil( min ); 
          max = Math.floor( max ); 

          return { min: min, max: max }; 
     }, 

     isPrime : function ( number ){ 
          var floor = Math.floor( number ); 
          if ( isNaN(floor) || floor == Infinity || floor != number || floor < 2 ){ 
               return false; 
          } 

          var floorSqrt = Math.floor( Math.sqrt( floor ) ); 
          var x = 2; 

          for ( x; x <= floorSqrt; x++ ){  if ( floor % x == 0 ) return false;  } 

          return true; 
     }, 

     getPrimes : function ( max, min ){ 
          var primes = [ ]; 
          if ( isNaN(max) ){  return primes;  } 

          var range = NaturalNumber.setRange( min, max, 2 ); 
          var min = range.min; 
          var max = range.max; 

          if ( max < 2 ){  return primes;  } 
          if ( min < 2 ){  min = 2;  } 

          for ( min; min <= max; min++ ){ 
               if ( primes.length === NaturalNumber.limit ){  return primes;  } 
               if ( NaturalNumber.isPrime( min ) ){  primes.push( min );  } 
          } 

          return primes; 
     }, 

     choosePrimes : function ( array ){ 
          var primes = [ ], n = 0, value; 

          for ( n; n < array.length; n++ ){ 
               value = array[ n ]; 
               if ( NaturalNumber.isPrime( value ) ){  primes.push( value );  } 
          } 

          return primes; 
     }, 

     isComposite : function ( number ){ 
          var floor = Math.floor( number ); 
          if ( isNaN(floor) || floor == Infinity || floor != number || floor < 2 ){ 
               return false; 
          } 

          var floorSqrt = Math.floor( Math.sqrt( floor ) ); 
          var x = 2; 

          for ( x; x <= floorSqrt; x++ ){  if ( floor % x == 0 ) return true;  } 

          return false; 
     }, 

     getComposites : function ( max, min ){ 
          var composites = [ ]; 
          if ( isNaN(max) ){  return composites;  } 

          var range = NaturalNumber.setRange( min, max, 4 ); 
          var min = range.min; 
          var max = range.max; 

          if ( max < 4 ){  return composites;  } 
          if ( min < 4 ){  min = 4;  } 

          for ( min; min <= max; min++ ){ 
               if ( composites.length === NaturalNumber.limit ){  return composites;  } 
               if ( NaturalNumber.isComposite( min ) ){  composites.push( min );  } 
          } 

          return composites; 
     }, 

     chooseComposites : function ( array ){ 
          var composites = [ ], n = 0, value; 

          for ( n; n < array.length; n++ ){ 
               value = array[ n ]; 
               if ( NaturalNumber.isComposite( value ) ){  composites.push( value );  } 
          } 

          return composites; 
     } 
}; 
</script>
 


소수 관련 사이트 (영문) :
List of prime numbers up to 1,000,000,000,000 (Prime I.T.)
Prime Number Lists (Math is Fun)
The First 1,000 Primes (The Prime Pages)




이 내용이 도움이 되셨다면, 아래의 하트 버튼을 눌러주세요. *^^*
If this article is helpful to you, please click the heart button below. *^^*