1use crate::ptrait::Primality;
2
3impl Primality for f64{
4 const ONE : Self = 1f64;
5
6 const FIRST_PRIME : Self = -9007199254740881f64;
7
8 const LAST_PRIME : Self = 9007199254740881f64;
9
10 fn is_prime(&self) -> bool{
11 if *self > 9007199254740992f64{
12 panic!("Not representable as 64-bit IEEE-754 float")
13 }
14 machine_prime::is_prime(self.abs() as u64)
15 }
16
17 fn strong_case(&self) -> bool{
18
19 if *self > 9007199254740992f64{
20 panic!("Not representable as 64-bit IEEE-754 float")
21 }
22 if *self == 1f64{
23 return false;
24 }
25 if (self.abs() as u64)&1 == 0{
26 return false
27 }
28 machine_prime::is_prime_wc(self.abs() as u64)
29 }
30}
31
32impl Primality for f32{
33 const ONE : Self = 1f32;
34
35 const FIRST_PRIME : Self = -16777213f32;
36
37 const LAST_PRIME : Self = 16777213f32;
38
39 fn is_prime(&self) -> bool{
40 if *self > 16777216f32{
41 panic!("Not representable as 64-bit IEEE-754 float")
42 }
43 machine_prime::is_prime(self.abs() as u64)
44 }
45
46 fn strong_case(&self) -> bool{
47
48 if *self > 16777216f32{
49 panic!("Not representable as 64-bit IEEE-754 float")
50 }
51 let n = self.abs() as u64;
52 if n == 1{
53 return false;
54 }
55 if n&1 == 0{
56 return false
57 }
58 machine_prime::is_prime_wc(n)
59 }
60}
61
62
63impl Primality for u64{
64
65 const ONE : Self = 0x1;
66
67 const FIRST_PRIME : Self = 0x2;
68
69 const LAST_PRIME : Self = 0xFFFFFFFFFFFFFFC5;
70
71 fn is_prime(&self) -> bool{
72 machine_prime::is_prime(*self)
73 }
74
75 fn strong_case(&self) -> bool{
76 if *self&1 == 0{
77 return false
78 }
79 if *self==1{
80 return false
81 }
82 machine_prime::is_prime_wc(*self)
83 }
84}
85
86impl Primality for u128{
87
88 const ONE : Self = 0x1;
89
90 const FIRST_PRIME : Self = 0x2;
91
92 const LAST_PRIME : Self = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61;
93
94 fn is_prime(&self) -> bool{
95 machine_prime::is_prime_128(*self)
96 }
97
98 fn strong_case(&self) -> bool{
99 if *self&1 == 0{
100 return false
101 }
102 if *self==1{
103 return false
104 }
105 machine_prime::is_prime_wc_128(*self)
106 }
107}
108
109impl Primality for i128{
110
111 const ONE : Self = 0x1;
112
113 const FIRST_PRIME : Self = -0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
114
115 const LAST_PRIME : Self = 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
116
117 fn is_prime(&self) -> bool{
118 machine_prime::is_prime_128(self.unsigned_abs())
119 }
120
121 fn strong_case(&self) -> bool{
122 if *self&1 == 0{
123 return false
124 }
125 if *self==1{
126 return false
127 }
128 machine_prime::is_prime_wc_128(self.unsigned_abs())
129 }
130}
131
132impl Primality for usize{
133
134 const ONE : Self = 0x1;
135
136 const FIRST_PRIME : Self = 0x2;
137
138 const LAST_PRIME : Self = 0xFFFFFFFFFFFFFFC5;
139
140 fn is_prime(&self) -> bool{
141 machine_prime::is_prime(*self as u64)
142 }
143
144 fn strong_case(&self) -> bool{
145 if *self&1 == 0{
146 return false
147 }
148 if *self==1{
149 return false
150 }
151 machine_prime::is_prime_wc(*self as u64)
152 }
153}
154
155impl Primality for u32{
156 const ONE : Self = 0x1;
157 const FIRST_PRIME : Self = 0x2;
158 const LAST_PRIME : Self = 0xFFFFFFFB;
159
160
161 fn is_prime(&self) -> bool{
162 machine_prime::is_prime(*self as u64)
163 }
164
165 fn strong_case(&self) -> bool{
166 if *self&1 == 0{
167 return false
168 }
169
170 if *self==1{
171 return false
172 }
173 machine_prime::is_prime_wc(*self as u64)
174 }
175}
176
177
178impl Primality for u16{
179 const ONE : Self = 0x1;
180 const FIRST_PRIME : Self = 0x2;
181 const LAST_PRIME : Self = 0xFFF1;
182
183 fn is_prime(&self) -> bool{
184 machine_prime::is_prime(*self as u64)
185 }
186
187 fn strong_case(&self) -> bool{
188 if *self&1 == 0{
189 return false
190 }
191 if *self==1{
192 return false
193 }
194 machine_prime::is_prime_wc(*self as u64)
195 }
196}
197
198impl Primality for u8{
199 const ONE : Self = 0x1;
200 const FIRST_PRIME : Self = 0x2;
201 const LAST_PRIME : Self = 0xFB;
202
203
204 fn is_prime(&self) -> bool{
205 machine_prime::is_prime(*self as u64)
206 }
207
208 fn strong_case(&self) -> bool{
209 if *self&1 == 0{
210 return false
211 }
212 if *self==1{
213 return false
214 }
215 machine_prime::is_prime_wc(*self as u64)
216 }
217}
218
219impl Primality for i8{
220 const ONE : Self = 0x1;
221 const FIRST_PRIME : Self = -0x7F;
222 const LAST_PRIME : Self = 0x7F;
223
224
225 fn is_prime(&self) -> bool{
226 machine_prime::is_prime(self.unsigned_abs() as u64)
227 }
228
229 fn strong_case(&self) -> bool{
230 if *self&1 == 0{
231 return false
232 }
233 if *self==1{
234 return false
235 }
236 machine_prime::is_prime_wc(self.unsigned_abs() as u64)
237 }
238}
239
240impl Primality for i16{
241 const ONE : Self = 0x1;
242 const FIRST_PRIME : Self = -0x7FED;
243 const LAST_PRIME : Self = 0x7FED;
244
245
246 fn is_prime(&self) -> bool{
247 machine_prime::is_prime(self.unsigned_abs() as u64)
248 }
249
250 fn strong_case(&self) -> bool{
251 if *self&1 == 0{
252 return false
253 }
254 if *self==1{
255 return false
256 }
257 machine_prime::is_prime_wc(self.unsigned_abs() as u64)
258 }
259}
260
261impl Primality for i32{
262 const ONE : Self = 0x1;
263 const FIRST_PRIME : Self = -0x7FFFFFFF;
264 const LAST_PRIME : Self = 0x7FFFFFFF;
265
266
267 fn is_prime(&self) -> bool{
268 machine_prime::is_prime(self.unsigned_abs() as u64)
269 }
270
271 fn strong_case(&self) -> bool{
272 if *self&1 == 0{
273 return false
274 }
275 if *self==1{
276 return false
277 }
278 machine_prime::is_prime_wc(self.unsigned_abs() as u64)
279 }
280}
281
282impl Primality for i64{
283 const ONE : Self = 0x1;
284 const FIRST_PRIME : Self = -0x7FFFFFFFFFFFFFE7;
285 const LAST_PRIME : Self = 0x7FFFFFFFFFFFFFE7;
286
287 fn is_prime(&self) -> bool{
288 machine_prime::is_prime(self.unsigned_abs())
289 }
290
291 fn strong_case(&self) -> bool{
292 if *self&1 == 0{
293 return false
294 }
295 if *self==1{
296 return false
297 }
298 machine_prime::is_prime_wc(self.unsigned_abs())
299 }
300}
301
302impl Primality for isize{
303 const ONE : Self = 0x1;
304 const FIRST_PRIME : Self = -0x7FFFFFFFFFFFFFE7;
305 const LAST_PRIME : Self = 0x7FFFFFFFFFFFFFE7;
306
307 fn is_prime(&self) -> bool{
308 machine_prime::is_prime(self.unsigned_abs() as u64)
309 }
310
311 fn strong_case(&self) -> bool{
312 if *self&1 == 0{
313 return false
314 }
315 if *self==1{
316 return false
317 }
318 machine_prime::is_prime_wc(self.unsigned_abs() as u64)
319 }
320}
321