Semiprime numbers are natural numbers that are products of exactly two (possibly equal) prime numbers.


Semiprimes   are also known as:

   semi-primes
   biprimes
   bi-primes
    2-almost    primes
   or simply:    P2  


Example
 
   1679  =  23 × 73  

(This particular number was chosen as the length of the Arecibo message).



Task

Write a function determining whether a given number is semiprime.



See also

 The Wikipedia article:  semiprime.
 The Wikipedia article:  almost prime.
 The OEIS sequence:  A001358: semiprimes  which has a shorter definition: the product of two primes.


 
class SemiPrime {
  function : Main(args : String[]) ~ Nil {
    for(i := 0; i < 100; i+=1;) {
      if(SemiPrime(i)) {
        "{$i} "->Print();
      };
    };
    IO.Console->PrintLine();
  }
 
  function : native : SemiPrime(n : Int) ~ Bool {
    nf := 0;
    for(i := 2; i <= n; i+=1;) {
      while(n%i = 0) {
        if(nf = 2) {
          return false;
        };
        nf+=1;
        n /= i;
      };
    };
 
    return nf = 2;
  }
}