Euler 214 проекта, Как я могу сделать это более эффективным?

Попробуйте это:

canActivate() {
  return this.userService.getCurrentUser()
    .pipe(
      tap(user => {
        if (!user) {
          this.router.navigate(['/operator']);
        }
      }),
    );
}

Если пользователь возвращается, это означает, что он вошел в систему, а если нет, он будет перенаправлен туда, куда вы хотите перенаправить.

5
задан iCodez 22 January 2015 в 18:51
поделиться

6 ответов

Я сделаю дикое предположение, что отнимающая много времени часть вычисляет числа чисел.

Одной мыслью может быть попытка сгенерировать их каким-нибудь умным способом. Подумайте, можно ли рассчитать их все сразу, вместо того, чтобы вычислять по одному числу за раз ...

Кроме того, как вы вычисляете функцию totient? Определение (число целых чисел k, где gcd (n, k) == 1) не является полезным способом работы с ним. Найдите его и посмотрите, сможете ли вы найти более подходящую формулу для него.

Редактировать: Да, это выражение, которое я был после. Но прохождение каждого целого числа, его разложение и вычисление значения слишком медленное. Ищите способ вычислить табличные элементы без какого-либо факторинга ...

3
ответ дан 13 December 2019 в 19:35
поделиться

Попробуйте вернуться назад ... (начните с 1, 2 и т. Д. И продвигайтесь вверх, а не пытайтесь вернуться назад и связать в цепочки)

edit: также обратите внимание, что totient (x) имеет конкретная структура , а именно, totient (x) = x * произведение (1- (1 / p)), где p - различные простые множители, которые делят x.

3
ответ дан 13 December 2019 в 19:35
поделиться

Подсказки :

  1. Используйте памятку и не рассчитывайте phi (n) более одного раза.

  2. Попробуйте использовать значения phi () , который вы уже вычислили для меньшего n при расчете phi (N). Что-то вроде phi (m * n) = phi (m) * phi (n) [Каким свойством должны обладать m и n ?]

  3. Знаете ли вы, что такое phi (p) , когда p - простое число ?

3
ответ дан 13 December 2019 в 19:35
поделиться

Well, I'm not familiar with it, and you don't show what you are doing... but some thoughts:

  • simplify the gcd; you don't need to know the answer - just whether there is any common factor - so factorise the smaller number (from the list of primes) and test each term against the larger number
1
ответ дан 13 December 2019 в 19:35
поделиться

Я не решил, но думаю, что вы можете быть на правильном пути с вашей схемой кэширования, вы просто не можете кешировать правильные вещи. Надеюсь, это не слишком много или слишком неясный «намек» для вас.

1
ответ дан 13 December 2019 в 19:35
поделиться

Одна вещь, которую нужно понять, это то, что когда вы достигаете 6, например, остальная часть цепочки всегда равна 2,1 .

0
ответ дан 13 December 2019 в 19:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: