Я предполагаю, что самый быстрый из всех способов заключается в жестком кодировании простых чисел в вашем коде.
Так почему бы просто не написать медленный сценарий, который генерирует другой исходный файл со всеми номерами, записанными в нем, а затем импортировать этот исходный файл при запуске вашей фактической программы.
Конечно, это работает, только если вы знаете верхнюю границу N во время компиляции, но, таким образом, это относится к (почти) всем проблемам Эйлера проекта.
PS: Возможно, я ошибаюсь, хотя разбор исходного кода с помощью жестко запрограммированных простых чисел выполняется медленнее, чем вычисление их в первую очередь, но насколько я знаю, Python запускается из скомпилированного .pyc
файлы, поэтому чтение двоичного массива со всеми простыми числами до N должно быть чертовски быстрым в этом случае.