프로그래밍 검색 블로그

템플릿 메타 프로그래밍 소수 구하기 본문

연습장

템플릿 메타 프로그래밍 소수 구하기

코딩조무사 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


Comments