Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use packed_simd::*;
- fn try_divide(size: i32) -> i32 {
- let mut primes = vec![f32x8::new(16777216f32, 16777216f32, 16777216f32, 16777216f32, 16777216f32, 16777216f32, 3f32, 2f32)];
- let mut sqr = 2;
- let max_sqr = f32::sqrt(size as f32) as i32;
- let mut pos: i32 = 8 - 3;
- let mut flag = true;
- let mut current = 5;
- let mut count = 2;
- while current <= size {
- let num = f32x8::splat(current as f32);
- if sqr * sqr <= current {
- sqr += 1;
- }
- for &divisor in primes.iter() {
- if num % divisor == f32x8::splat(0f32) {
- break;
- }
- if divisor.extract(0) as i32 >= sqr {
- count += 1;
- if current <= max_sqr {
- *primes.last_mut().unwrap() = primes.last().unwrap().replace(pos as usize, current as f32);
- pos -= 1;
- if pos < 0 {
- primes.push(f32x8::splat(16777216f32));
- pos = 8 - 1;
- }
- }
- break;
- }
- }
- flag = !flag;
- current += if flag { 4 } else { 2 };
- }
- count
- }
- fn main() {
- println!("{}", try_divide(100));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement