Advertisement
Guest User

ege25-boost

a guest
May 9th, 2022
254
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.08 KB | None | 0 0
  1. import java.util.HashSet;
  2. import java.util.Set;
  3. import java.util.concurrent.ExecutorService;
  4. import java.util.concurrent.Executors;
  5. import java.util.concurrent.TimeUnit;
  6.  
  7. public class Main {
  8.     public static void main(String[] args) throws InterruptedException {
  9.         //Создаем потоки-исполнители
  10.         ExecutorService service = Executors.newFixedThreadPool(10);
  11.  
  12.         //Непосредственно само решение к заданию https://otvet.mail.ru/question/229057174
  13.         for(int i=0; i<10; i++) {
  14.             //Добавляем наши таски в потоки
  15.             service.submit(new Task(35_000_000 + 500_000 * i, 35_500_000 + 500_000 * i));
  16.         }
  17.         long time = System.currentTimeMillis();
  18.         //Запускает потоки-исполнители
  19.         service.shutdown();
  20.         service.awaitTermination(1, TimeUnit.DAYS);
  21.         System.out.println(System.currentTimeMillis()-time + "ms");
  22.     }
  23.  
  24.     //Функция для поиска делителей, n - число, делители которого ищем
  25.     public static Set<Integer> divs(int n) {
  26.         //Создаем множество, где будут только уникальные делители, ведь нам не нужен повтор, если число будет нацело извлекаться из корня
  27.         Set<Integer> divs = new HashSet<>();
  28.         //Итерируем до корня из числа, почему так: читать *¹ https://otvet.mail.ru/question/229057174
  29.         for(int i=1; i <= Math.sqrt(n); i++)
  30.             //Проверяем, делится ли наше число n на число i, посредством получения остатка (число будет делиться на число нацело, если остаток равен 0)
  31.             if(n % i == 0) {
  32.                 //Если n делится на i, тогда мы заносим это число во множество
  33.                 divs.add(i);
  34.                 //Заносим вторую пару от деления, читать *² https://otvet.mail.ru/question/229057174
  35.                 divs.add(n / i);
  36.             }
  37.         //Возращаем наши делители
  38.         return divs;
  39.     }
  40. }
  41. class Task implements Runnable {
  42.     private final int a, b;
  43.  
  44.     public Task(int a, int b) {
  45.         this.a = a;
  46.         this.b = b;
  47.     }
  48.  
  49.     @Override
  50.     public void run() {
  51.         task(a, b);
  52.     }
  53.  
  54.     //Задача для 1 потока, делим наши 5 миллионов чисел на 10 задач по 500 тысяч чисел
  55.     public void task(int a, int b) {
  56.         for(int i=a; i<=b; i++) {
  57.             Set<Integer> divs = Main.divs(i);
  58.             int neChet = 0;
  59.             for(int n : divs) {
  60.                 if (n % 2 != 0)
  61.                     neChet++;
  62.                 if(neChet > 5)
  63.                     break;
  64.             }
  65.             if(neChet == 5)
  66.                 System.out.println(i);
  67.         }
  68.     }
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement