オイラー関数プレイテーブル

1つの#include <ビット/ STDC ++。H>
 2  の#defineっ長い長い 
 3  の#defineスキャン(I)のscanf( "%d個"、&I)
 4  の#define scand(I)のscanf( "%のLF"、&I)
 5  #定義 scanl(I)のscanf( "%のLLD"、&I)
 6  の#define Fを(iは、、B)は(iは= int型、iが= Bを<; I ++)は 
 7  の#define PB(I)一back(I)
 8  の#define PPB pop_back()
 9  の#define PFのprintf
 10  の#define DBG(引数...)COUT <<#1引数<< ":" <<引数<< ENDL。
11  使って 名前空間はstdを、
  INT オイラー[最大];
 14  ボイドのinit(){
 15       オイラー[ 1。 =] 1。;
 16       INT I = 2 ;私はマックス<; I ++が。17         オイラー[I] = I;
 18である      ためINT I = 2。 I ++は、私は、マックス< 19          IF(オイラー[I] == I)
 20である            ためint型 J = I; J <マックス; J + = I)
 21は                、オイラー[J] =オイラー[J] / I *は(I- 1); // 最初の分割は、中間データのオーバーフロー防止するために行われる
22  }
23  // 一般式カウント
24  intをオイラー(INT N-){ // オイラーを返す(N-)
25      INT RES = N-、A = N-;
 26である     ためINT I = 2、I *はI <= A; I ++は) {
 27          IF(%のI == 0 ){
 28              RES = RES / I *は(I- 1); // 最初の分割の中間データのオーバーフロー防止するために行われる
29              ながら(I%==を0)、A / = I;
 30          }
 31である     }
 32      IF(A> 1。 RES = RES / A *(A-)1。);
33      リターンのres;
34 }

呼ばれる、最初の使用は、init();

私はオイラー関数値がオイラー[i]がAに格納されている対応します。

ここで、0 <私はマックス<;

おすすめ

転載: www.cnblogs.com/St-Lovaer/p/11404925.html