연습장
템플릿 메타 프로그래밍 소수 구하기
코딩조무사
2017. 10. 6. 10:45
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | //bool is_prime(unsigned long long v){ // for(unsigned long long i = 2; i < v; i++){ // if ( v % i == 0 ) // return false; // } // return true; //} template<unsigned long long N, unsigned long long C> struct is_mod{ static const bool value = (N % C != 0LL) && is_mod<N, C - 1LL>::value; }; template<unsigned long long N> struct is_mod<N, 2LL>{ static const bool value = (N % 2 != 0LL); }; template<unsigned long long N> struct is_prime{ static const bool value = is_mod<N, N - 1LL>::value; }; template<> struct is_prime<0LL>{ static const bool value = false; }; template<> struct is_prime<1LL>{ static const bool value = false; }; template<> struct is_prime<2LL>{ static const bool value = true; }; | cs |
테스트
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #include <iostream> using namespace std; int main(){ cout << is_prime<2>::value <<endl; cout << is_prime<3>::value <<endl; cout << is_prime<4>::value <<endl; cout << is_prime<5>::value <<endl; cout << is_prime<6>::value <<endl; cout << is_prime<7>::value <<endl; cout << is_prime<8>::value <<endl; cout << is_prime<9>::value <<endl; cout << is_prime<10>::value <<endl; cout << is_prime<11>::value <<endl; cout << is_prime<12>::value <<endl; cout << is_prime<13>::value <<endl; } | cs |