学習日記数3 - オイラーオイラーの関数と線形ふるいです

まあ、数日は数論を見て、午後合格を参照するには、各時間を見つけているので、今日はオイラーオイラーの関数と線形ふるいに瞬間をキャッチした後に取得するには、ユークリッド逆元を拡張し、について語りました今日の収入こと:

 

オイラーの機能は何ですか?

数論では、のために正の整数 nは、オイラー関数は、以下NとNに等しい正の整数である素数の数の数。(互いに素とは何ですか?互いに素は、一般的に2つの数の最大公約数を指しているプライム)

オイラー関数が一般的に用いられている「φ(N)= ..」は、発現しました

 

オイラー関数の使用の基本的な性質?

Φは(n)が素数nは、(n)は、φ= Nである場合 - 1、nは素数であり、そして場合ので、それ自体がそれ自体プライムしないだけで。

 

2:

もしM MOD p = 0で、次いでPHI(M * p)はp個の*ファイ(m)を=。

 証明:

仮定するB = GCD(N、M)nは、mが互いに素れない∴N = K1・B、M = K2・B

∴N + M =(K1 + K2)のB∴n+ M及びMは互いに素ではありません

m個の整数は、[1、m]は、n個のコMと互いに素ではない - φ(m)の数。

mおよびn + mが互いに素れない∴[1 + M、M + M]、すなわち(M、2M] Mの整数はまた、M-φ(M)Aと互いに素されていません

∴[1、M・P] M整数mと互いに素されていない・PP・φ(M)A

∵[1、M・P] pは整数当mは・Mが互いに素ではないと・P - P・φ(M)= M・P - φ(M・P)

∴φ(M・P)= P・φ(M)

 

 III:!M modのn = 0の場合、φ(M×n個)=φ (M)*(N-1)=φ(M)*φ(n)は、 これを見ることができます

φ(M×n個)が乗法関数です。

 

4:

 

 

どのようにオイラー関数の計算?

ギャングスターhttps://blog.csdn.net/liuzibujian/article/details/81086324 liuzibujian(非常に明確に書かれた)のブログを参照することができますについての詳細を学ぶために。誰もが見てのためにここにそれシンプル:

 

 

オイラー機能を持つ、我々はさらに行くオイラー線形画面を理解することができます!

オイラー線形篩効果は、全ての(削除)合成数の範囲をスクリーニングし、そして各オイラー関数については、この範囲内のすべての既知の素数を取得します。

 

など、多くの首長は非常に詳細なああの話ではない、と私は兄ではないので、私は最終的に根拠オイラー画面をクリアするために、様々なデバッグ最も簡単な引数のさまざまな要約を使用しようとすることは何です。

 

私はそれの原則の下で、私の以前のブログは、スクリーニング方法は非常に似ていると述べプライムとの共おおよその数の部分を選択したことを言うだろうが、これは一緒にすべての数字をフィルタリングするための最低限の品質係数で、より高速スクリーニング以前よりも、複数のスクリーニングでありますマーク。

(100オイラーメッシュ内)コードは以下の通りであります:

1の#include <cstdioを>
 2の#include <CStringの>
 3の#include <iostreamの>
 4の#include < malloc関数 .H>
 5の#include <memory.h>
 6の#include <conio.h>
 7  使って 名前空間STDを、
8  
9  INTの PHI [ 101 ]、プライム[ 101 ]。
10  ブール P [ 101 ]。
11  
12  INT メイン(){
 13      のmemset(P、はsizeof (P))。
14      int型 CNT = 0 15の      PHI [ 1 ] = 1 16      のためには、int型、I = 2 ; iが<= 100 ; ++ I){
 17          であれば(P [i])と{
 18              プライム[++ CNT] = I; // 2,3,5,7-
 19          }
 20          int型の J = 1 ; J <= CNT &&プライム[J] * I <= 100 ; ++ j)の
 21          {
 22              P [プライム[J] * I] = 23  
24              もし(I%プライム[j] == 0破ります;
25          }
 26      }
 27  
28      のためにint型 = Iを2 ; iは= < 100 ; iは++ 29          であれば(P [i])とCOUT << I << ENDL。
30      _getch()。
31      リターン 0 ;
32 }

 

少し、最初の3つの配列PHI []、プライム[]、P []、その効果が保たれている3つのオイラー機能、ストレージ素数スクリーニングによって、まあ少し。

最初のステップ:私たちがtrueに初期化され、すべてのp bool型の配列を持っています

ステップ2:私が素数であるならば、それは素数が素数[](最初の人々は、なぜ判断pを行きました、頼むことになり、[Iに格納されている場合は、最初に決定し、ループのために最初に行きます]、P [i]は完全に真実ではないん、それはすべての数字がそれに堆積されているわけではないのですか?これは偽としてマークされたすべての合成数を、フィルタリングするための最低限の品質係数を使用することで、私が言った冒頭で、心配しないでください。 2は右、素数であるかというと、2から上映がループための第二に入っていない開始するには、P [プライム[J] * i]をフィルタリングする4を入れて、一度に、バックには3〜6になりますスクリーニング、それは素数はまだ真である、組み合わせの数がfalseになっていないのですか?)

第三工程:第二工程においては、[* Iプライム[J]第二サイクル、スクリーニング段階、Pを入力するには、(I%プライム[j] == 0)はブレーク次いで場合について説明したが、それが何を意味します?あるいは、フォーカスが各複合番号を尋ねることであることをその最小の素因数雑草アウトによって決定されます。これは、電流Iが複数のプライム[j]は、次いで、I = Nプライム×[J](n∈N*)は必ずしも真であると仮定する。私はI = Nの素数×[j]は、私は総理×[J + 1]から、[J + 1]プライム×ときプライム[J + 1]とき、私はふるいに行くだろう、私たちはループの外ではないないと= nで、それは余分なステップの多くは、複雑さを増す必要はありません、我々は品質係数を最小限に抑えたいものではありませんプライム[J + 1]、×プライム[j]を×。

 

 

OK、我々は意志をスクリーニングし、次はオイラーの関数であります -

コードは以下の通りであります:

1の#include <cstdioを>
 2の#include <CStringの>
 3の#include <iostreamの>
 4の#include < malloc関数 .H>
 5の#include <memory.h>
 6の#include <conio.h>
 7  使って 名前空間STDを、
8  
9  INTの PHI [ 101 ]、プライム[ 101 ]。
10  ブール P [ 101 ]。
11  
12  INT メイン(){
 13      のmemset(P、はsizeof (P))。
14      int型 CNT = 0 15の      PHI [ 1 ] = 1 16      のためには、int型、I = 2 ; iが<= 100 ; ++ I){
 17          であれば(P [i])と{
 18              プライム[++ CNT] = I。
19              PHI [i]は= I - 1 20          }
 21          のためにINT J = 1 ; J <= CNT &&プライム[J] * I <= 100 ; ++ j)の
 22          {
 23              P [プライム[J] * I] = 24  
25             もし(I%プライム[J] == 0 26              {
 27                  PHI [iが[プライム* J] =プライム[J] * PHI [i]は、
28                  ブレーク;
29              }
 30              {
 31                  PHI = PHI [iがj]は[プライム*] [I] * PHI [プライム[J]。
32              }
 33          }
 34      }
 35  
36      //がため(; I <= 100 I ++は、I = 2 INT)
 37          // もし(P [i])とCOUT << I << ENDL。
38      のためのint型 J = 1 ; J <= 100; J ++ 39          coutの<< PHI [J] << てendl;
40      _getch()。
41      リターン 0 ;
42 }

 

変化の数行よりも元のコード、第一の基質はるかPHI内のステートメントの数を決定することであるが= I [i]は実際には- 1 ; Iは、nが素数であれば、対応する前に前記φ(N)= N - 1第二の方法は、スクリーニングの最小素因数で前第二及び第三性の性質から明らかであり、プライム[j]が素数である、私は任意の数であり、i%プライム[j] == 0、次いで、次いで、PHI(m個*のP)= P * PHI(M)。(pは素数である)場合、私%プライム[J] =! 0 、次いで、 = PHI [I] * PHI [プライム[J] [Iプライム[J] *]ファイ;従ってPHIそれぞれを確保値が更新されます。番号1はありませんどちらも結合しても素数であるが、国際的な要件に応じて、オイラー1の関数であるので、特別な場合のためにファイは、[1]、我々は、直接PHI [1] = 1を行う必要があります。

 

要約すると、我々はすべてのステップを完了している、これはオイラー線形画面の役割である、我々は理解することができるはず、結局、私はあまりにも料理でした。

-------------------------------------------------- -------------------------------------------------

 

おすすめ

転載: www.cnblogs.com/xiangqi/p/11128632.html