Library

This documentation is automatically generated by online-judge-tools/verification-helper

View the Project on GitHub noshi91/Library

:warning: Divisor Zeta Transform
(algorithm/divisor_zeta_transform.cpp)

Depends on

Code

#include "other/int_alias.cpp"

#include <vector>

template <class S>
void divisor_zeta_transform(std::vector<typename S::value_type> &a) {
  const usize n = a.size();
  std::vector<bool> sieve(n, true);
  for (usize p = 2; p < n; p += 1) {
    if (!sieve[p])
      continue;
    for (usize k = 1; k * p < n; k += 1) {
      sieve[k * p] = false;
      a[k * p] = S::operation(a[k], a[k * p]);
    }
  }
}

/**
 * @brief Divisor Zeta Transform
 */
#line 2 "other/int_alias.cpp"

#include <cstddef>
#include <cstdint>

using i32 = std::int32_t;
using i64 = std::int64_t;
using u32 = std::uint32_t;
using u64 = std::uint64_t;
using isize = std::ptrdiff_t;
using usize = std::size_t;
#line 2 "algorithm/divisor_zeta_transform.cpp"

#include <vector>

template <class S>
void divisor_zeta_transform(std::vector<typename S::value_type> &a) {
  const usize n = a.size();
  std::vector<bool> sieve(n, true);
  for (usize p = 2; p < n; p += 1) {
    if (!sieve[p])
      continue;
    for (usize k = 1; k * p < n; k += 1) {
      sieve[k * p] = false;
      a[k * p] = S::operation(a[k], a[k * p]);
    }
  }
}

/**
 * @brief Divisor Zeta Transform
 */
Back to top page