USACOTrainning.Prime Palindromes

题目大意是给两个整数a,b,然后求出这之间的所有回文素数。

枚举回文的数,其实枚举回文的数加上判断宿舍的时间不是很长的。

 

  
    
1 #include < iostream >
2 #include < string >
3 #include < algorithm >
4 #include < string .h >
5 #include < vector >
6 #include < math.h >
7 #include < time.h >
8 #include < queue >
9 #include < set >
10   using namespace std;
11
12 vector < int > ans;
13
14   int num[ 8 ];
15
16 bool check( int val)
17 {
18 for ( int i = 2 ; i <= sqrt(val * 1.0 ); i ++ )
19 {
20 if (val % i == 0 ) return false ;
21 }
22 return true ;
23 }
24
25 void dfs( int i, int len)
26 {
27 if (i == len)
28 {
29 int val = 0 ;
30 for ( int j = 0 ; j < 2 * len; j ++ )
31 {
32 if (j < len) val = val * 10 + num[j];
33 else val = val * 10 + num[ 2 * len - 1 - j];
34 }
35 if (check(val)) ans.push_back(val);
36 return ;
37 }
38
39 if (i == 0 )
40 {
41 for ( int j = 1 ; j <= 9 ; j += 2 )
42 {
43 // if(j == 5) continue;
44 num[i] = j;
45 dfs(i + 1 , len);
46 }
47 }
48 else
49 {
50 for ( int j = 0 ; j <= 9 ; j ++ )
51 {
52 num[i] = j;
53 dfs(i + 1 , len);
54 }
55 }
56 }
57
58 void ddfs( int i, int len)
59 {
60 if (i == len)
61 {
62 int val = 0 ;
63 for ( int j = 0 ; j < 2 * len - 1 ; j ++ )
64 {
65 if (j < len) val = val * 10 + num[j];
66 else val = val * 10 + num[ 2 * len - 2 - j];
67 }
68 if (check(val)) ans.push_back(val);
69 return ;
70 }
71
72 if (i == 0 )
73 {
74 for ( int j = 1 ; j <= 9 ; j += 2 )
75 {
76 // if(j == 5) continue;
77 num[i] = j;
78 ddfs(i + 1 , len);
79 }
80 }
81 else
82 {
83 for ( int j = 0 ; j <= 9 ; j ++ )
84 {
85 num[i] = j;
86 ddfs(i + 1 , len);
87 }
88 }
89 }
90
91 void ready()
92 {
93 for ( int i = 1 ; i <= 8 ; i ++ )
94 {
95 if (i % 2 == 0 ) dfs( 0 , i / 2 );
96 else ddfs( 0 , i / 2 + 1 );
97 }
98 }
99
100 int main()
101 {
102 freopen( " pprime.in " , " r " , stdin);
103 freopen( " pprime.out " , " w " , stdout);
104
105 ready();
106 sort(ans.begin(), ans.end());
107 int a, b, res = 0 ;
108 scanf( " %d%d " , & a, & b);
109 for ( int i = 0 ; i < ans.size(); i ++ )
110 {
111 if (ans[i] >= a && ans[i] <= b) printf( " %d\n " , ans[i]);
112 }
113 }

 

你可能感兴趣的:(USACO)