OK here's a good one for you.
Did them all. First one quite simply, runs in 0.004sec.
Part 2 I get the answer in 11.3sec (thanks to using libgmp).
$ cat a.c
#include <gmp.h>
#include <stdio.h>
int main(int argc, char **argv )
{
mpz_t r;
mpz_init( r );
mpz_fac_ui( r, atoi(argv[1]) );
printf( "pc = %lu\n", mpz_popcount( r ) );
return( 0 );
}
$ gcc a.c -o a -lgmp
$ time ./a 30254975
pc = 338988211
real 0m11.221s
user 0m11.078s
sys 0m0.148s
Part 3 also rattles through in 84s (again thanks to libgmp).
It'd be a completely different story if I was trying to implement those without using a bignum library.
Part 2 can be partially optimised:-
If you implement the factorial yourself you can remove all factors of 2 as you multiply up, since they won't affect the number of bits set.
Will try and come up with my own puzzles in a bit. What I'll probably do is to extend the inputs of existing puzzles (from AOC 2015/16/17) to push them to the point that lots of optimisations have to be made for them to complete in a reasonable timeframe.