This documentation is automatically generated by online-judge-tools/verification-helper
#include "math/euler_phi_table.hpp"vector<int> euler_phi_table(int n) : $\phi(x)$ ($1 \leq x \leq n$) が配列の添え字 $1, 2, \cdots ,n$ に格納された長さ $n+1$ の配列を返す $O(N \log N \log N)$$\phi(n)$ : $1$ から $n$ までの自然数のうち、 $n$ と互いに素なものの個数
$\phi(n) = \prod_{p \mid n} \left(1 - \frac{1}{p}\right)$
これを、素因数側から求めることによって、$\phi(x)$ ($1 \leq x \leq n$) についてまとめて計算することが可能となる。
#pragma once
#include<vector>
std::vector<int> euler_phi_table(int n){
std::vector<int> phi(n + 1);
for(int i = 0;i <= n;i++){
phi[i] = i;
}
for(int i = 2;i <= n;i++){
if(phi[i] == i){
for(int j = i;j <= n;j += i){
phi[j] = phi[j] / i * (i - 1);
}
}
}
return phi;
}#line 2 "math/euler_phi_table.hpp"
#include<vector>
std::vector<int> euler_phi_table(int n){
std::vector<int> phi(n + 1);
for(int i = 0;i <= n;i++){
phi[i] = i;
}
for(int i = 2;i <= n;i++){
if(phi[i] == i){
for(int j = i;j <= n;j += i){
phi[j] = phi[j] / i * (i - 1);
}
}
}
return phi;
}