51日目(02-19-2021)


予定の試験は9時に始まります.試験内容を大まかに説明すると、前回YouTube APIを使ってクライアントを実現したのとほぼ同じです.しかし、直接作成サーバが追加され、データに応答します.テストは、クライアントの作成とサーバの2つに大きく分けられます.実施の過程で、うまくいかなかった点が多く、どうしたのか、結果はすべて通過しました.面白そうもっと詳しい内容はまだ提出していないので、書けません.
だから今日は面白い数学の公式を書いて、トフラブレムの問題を解いたときに見つけました.
エラトステネスのふるい
エラトステネスのふるいはランダムな数字を決定し、その数字までのすべての小数を求める方法である.文系出身ですが、高校時代に数学が大好きだったのは初めてです.△アルゴリズムを解く過程で、これらの知識はかなり重要だと思います.方法を説明するには、
  • 2から小数を求めたいすべての数をリストします.
  • 2は少数なので、2のすべての2の倍数を取り除きます.
  • 残りの数のうち3を除くすべての3の倍数を除く.
  • の残りの数のうち5を除くすべての5の倍数をクリアします.
  • の残りの7を除くすべての7の倍数をクリアします.
  • ビットのプロセスを繰り返すと少数を求めることができる.
  • (注:ウィキペディア->画像の説明はとてもいいです.)
    不思議ですね.
    function solution(n) {
      const primes = new Array(n).fill(true); // 1
      primes[0] = false; // 2
      for(let i = 2; i ** 2 <= n; i += 1) { // 3
        if (primes[i - 1] === true) { // 4
          for (let j = i ** 2; j <= n; j += i) { // 5
            primes[j - 1] = false; // 6
          }
        }
      }
      return primes.filter(e => e).length; // 7
    }
    (注:プログラマ-小数を求める)
    上のコードは検索中にたまたま他人のブログから持ってきたものです.まず、これは書きにくいアルゴリズムなので・・・コードを見て、分析してみました.
  • が購入したい区間nまでのすべての数字がtrueと表示されます.
  • 素数[0]、すなわち1は素数ではないのでfalseである.
  • 2からnまでをチェックします.条件はi**2です.すなわち、iの二乗が要求される数の範囲を超えると、確定する必要がないので、演算量が大幅に減少します.
  • 数字iの索引はi-1、数字iがtrueの場合は重複文
  • を実行する.
  • 初期値がi**2の理由は(2,3,5,7)自分を含まないためである.
  • 条件に従ってjの倍数falseを検索する.
  • 配列のtrueが見つかれば,計算長さは少数の数を得ることができる.
  • 本当に賢い解題方法ですね.小数を1つずつ検索するのではなく、小数以外のすべての内容を削除して検索します.
    10の小数を求めると、
    1: [ false, true, true, true, true, true, true, true, true, true ]
    2: [ false, true, true, false, true, false, true, false, true, false ]
    3: [ false, true, true, false, true, false, true, false, false, false ]
    一番上のfor文は3回回転するだけでいいです.