C ++ 389 바이트
#include <iostream>
#include <boost/multiprecision/cpp_int.hpp>
#include <boost/multiprecision/miller_rabin.hpp>
using namespace boost::random;typedef boost::multiprecision::cpp_int Z;int main(int,char**v){mt19937 m(clock());independent_bits_engine<mt11213b,256,Z>g(m);Z n{v[1]},p;while(p++<=n)if(miller_rabin_test(p,25,g)&&p.convert_to<std::string>().find( "666" )!=-1)std::cout<<p<<" ";}
이것은 전체 프로그램입니다!
컴파일하려면 Boost가 필요합니다. (또는 좋아하는 온라인 C ++ 셸에 복사하여 붙여 넣습니다.)
명령 줄에서 실행하십시오 . n 을 인수로 지정.
언 골프 드 :
#include <iostream>
#include <boost/multiprecision/cpp_int.hpp>
#include <boost/multiprecision/miller_rabin.hpp>
using namespace boost::random;
typedef boost::multiprecision::cpp_int integer;
int main( int argc, char** argv )
{
mt19937 mt( clock() );
independent_bits_engine <mt11213b, 256, integer> rng( mt );
integer input {argv[ 1 ]};
integer possible;
while (possible++ <= input)
if (
// is_prime( possible )
miller_rabin_test( possible, 25, rng )
&&
// possible has "666" in it
(possible.convert_to <std::string> ().find( "666" ) != std::string::npos))
std::cout << possible << " ";
}
난수 테스트 측면에서 바로 가기가 이루어졌습니다. 원래 코드는 6661에서 가능한 소수를 테스트하기 시작했으며 2 씩 증가했습니다. npos 대신 (-1) 때문에 컴파일러 경고가 나타납니다.
아직도, 이것은 꽤 빨리 실행됩니다. 내 오래된 AMD Sempron 130에서 1,000,000 미만의 214 개의 사탄 프라임을 모두 찾는 데 약 40 초가 걸렸습니다.
: ^ D
output the nth satan prime
... 도전