Как получить уникальный идентификатор устройства в Swift?

Две ноты:

(a + b + c) % m

эквивалентно

(a % m + b % m + c % m) % m 

и

(a * b * c) % m

эквивалентно

((a % m) * (b % m) * (c % m)) % m

В результате вы можете рассчитать каждый термин, используя рекурсивную функцию в O (log p ):

int expmod(int n, int p, int m) {
   if (p == 0) return 1;
   int nm = n % m;
   long long r = expmod(nm, p / 2, m);
   r = (r * r) % m;
   if (p % 2 == 0) return r;
   return (r * nm) % m;
}

И элементы суммы, использующие цикл for:

long long r = 0;
for (int i = 1; i <= n; ++i)
    r = (r + expmod(i, i, m)) % m;

Этот алгоритм O ( n log n ).

153
задан Atomix 5 August 2015 в 00:27
поделиться