Advertisement
paranid5

_super_number

Jun 14th, 2020 (edited)
359
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 1.85 KB | None | 0 0
  1. /*
  2. Суперчисла
  3. Суперчислом называется число, являющееся суммой двух простых чисел из диапазона [2…B]. Требуется найти все суперчисла из заданного диапазона [A…B].
  4. Примеры
  5. Ввод 3 10
  6. Вывод
  7. 4
  8. 5
  9. 6
  10. 7
  11. 8
  12. 9
  13. 10
  14. */
  15.  
  16. use std::io;
  17.  
  18. fn input() -> i32 {
  19.     let mut _s: String = String::new();
  20.     io::stdin().read_line(&mut _s).expect("read_line");
  21.     return _s.trim().parse().expect("convert");
  22. }
  23.  
  24. fn main() {
  25.     let mut _a = input();
  26.     let mut _b = input();
  27.     let mut _prime = vec![];
  28.     _prime.resize((_b + 1) as usize, 1);
  29.     let mut _iz = vec![];
  30.     for _i in 2.._b + 1 {
  31.         if _prime[_i as usize] == 1 {
  32.             _iz.push(_i);
  33.         }
  34.         if _prime[_i as usize] == 0 || _i as i128 * 1 as i128 * _i as i128 > _b as i128 {
  35.             continue;
  36.         }
  37.         for _j in (_i * _i.._b + 1).step_by(_i as usize) {
  38.             _prime[_j as usize] = 0;
  39.         }
  40.     }
  41.     let mut _size = 0;
  42.     let mut _am = 0;
  43.     let _izs = _iz.len();
  44.     for _i in (1.._izs + 1).rev() {
  45.         _size += _i;
  46.     }
  47.     let mut _ans = vec![];
  48.     _ans.resize(_size, 0);
  49.     for _i in 0.._izs {
  50.         for _j in _i.._izs {
  51.             _ans[_am as usize] = _iz[_i as usize] + _iz[_j as usize];
  52.             _am += 1;
  53.         }
  54.     }
  55.     _ans.sort();
  56.     let mut _print = false;
  57.     let mut _it = 0;
  58.     while !_print {
  59.         if _ans[_it as usize] >= _a {
  60.             _print = true;
  61.         } else {
  62.             _it += 1;
  63.         }
  64.     }
  65.     println!("{}", _ans[_it as usize]);
  66.     for _i in _it + 1.._size {
  67.         if _ans[_i as usize] != _ans[(_i - 1) as usize] && _ans[_i as usize] >= _a && _ans[_i as usize] <= _b {
  68.             println!("{}", _ans[_i as usize]);
  69.         }
  70.     }
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement