{ { 999983 1000003 } } [ 999969000187000867 unique-factors ] unit-test
{ 999967000236000612 } [ 999969000187000867 totient ] unit-test
{ 0 } [ 1 totient ] unit-test
+{ { 425612003 } } [ 425612003 factors ] unit-test
PRIVATE>
: group-factors ( n -- seq )
- [ 2 [ over 1 > ] [ write-factor next-prime ] [ ] while 2drop ] { } make ;
+ [
+ 2
+ [ 2dup sq < ] [ write-factor next-prime ] [ ] until
+ drop dup 2 < [ drop ] [ 1 2array , ] if
+ ] { } make ;
: unique-factors ( n -- seq ) group-factors [ first ] map ;