Learning F# with Prime Factorization
I think you show a good understanding of F# as a language and functional programming in general as far as I can see. A couple of things though:

You use x as variable name on multiple levels of function definitions. It makes it hard to read.

IMO match .. with is a very readable construct for more than two matches. But for only two I prefer if-statements.

The check function/sequence is a kind of double sequence.
I would do it this way:

let primefactors target = 
    let check ta = Seq.concat [seq { yield 2UL }; { 3UL .. 2UL .. uint64(ceil(sqrt(float(ta))))}]


and then call it like this:

let nextfactor x = 
    match x with
    |1UL -&gt; x
    |_ -&gt; check x
          |&gt; Seq.skipWhile(fun idx -&gt; x % idx &lt;&gt; 0UL)
          |&gt; getFirstOrDefault x


It will make the function much faster.

The getfactors - function is not tail-recursive, but can easily be changed to be:

let rec getfactors x factors =
    match nextfactor x  with
    |1UL -&gt; factors
    // Here the factors list is handled before the recursive call.
    |factor -&gt; getfactors (x / factor) (factor :: factors)