SemiPrimes := proc( n ) local fact; fact := NumberTheory:-Divisors( n ) minus {1, n}; if numelems( fact ) in {1,2} and not( member( 'false', isprime ~ ( fact ) ) ) then return n; else return NULL; end if; end proc: { seq( SemiPrimes( i ), i = 1..100 ) };