検索
ホームページウェブフロントエンドjsチュートリアルJSを使用して配列の最小公倍数と最大公約数を見つける方法

今回はJSを使って配列の最小公倍数と最大公約数を求める方法を紹介します注意点は以下の通りです。実際のケースですので見てみましょう。

この方法は、複数の数値の最小公倍数を見つけるための変換アルゴリズムに由来しています (詳細については付録を参照)

最小公倍数のアルゴリズムは、最大公約数から変換されます。最大公約数は次の手順で取得できます:

(1) a1、a2、...、an の中から最小の非ゼロ項 aj を見つけます。複数の最小の非ゼロ項がある場合は、いずれかを選択します

。 (2) aj 以外の他のすべての非ゼロ項 ak of は ak mod aj に置き換えられます。 aj 以外に他の非ゼロ項がない場合は、(4)
(3) に進みます。 ) a1,a2,..., an の最大公約数は aj です

私は公倍数と公約数を見つけるために 2 つのバージョンの

javascript

を書きましたが、主にアルゴリズムに重点を置き、名前にはあまり注意を払いませんでした。多くは一文字の名前を直接書いただけです。

0. シンプルでわかりやすいループ

function getMin(arr){
  var min = Infinity
  arr.forEach(function(item){
    if( item  item===min? item:item%min
    )
  }
  while (!howMuchZero(arr))
  return getMin(arr)
}
function minMulti(arr){
  var totalMulti = arr.reduce((pre,item)=>
    pre = pre * item
    )
  var brr = arr.map((item)=>
    totalMulti/item
    )
  var brr_maxpi = maxpi(brr)
  return totalMulti/brr_maxpi
}

1. 関数セット関数

var arr_minMulti, arr_maxpi
function minMulti(arr){
  var totalmulti =
    arr.reduce((multi,curvalue) => multi * curvalue)
  if (totalmulti === 0) {
    arr_minMulti = 0
    return
  }
  var marr = arr.map((item) => totalmulti/item)
  maxpisor(marr)
   arr_minMulti = totalmulti / arr_maxpi
}
function maxpisor(arr){
  var min = getMin(arr)
  if(min === Infinity) {
    arr_maxpi = min
    return
  }
  var exparr = arr.filter(function(item){
      return (item !== min && item !== 0)
  })
  if(exparr.length === 0){
    arr_maxpi = min
    return;
  }
  else{
    var modearr = arr.map(function(item){
      return (item === min||item===0)? item:item%min
    })
    console.log(modearr,'modearr')
    maxpisor(modearr)
  }
}
function getMin(arr){
  var min = Infinity
  arr.forEach(function(item){
    if (item && item 

2. オブジェクト指向

function maxpisor(arr,origin){
  this.arr = arr
  this.min = this._getMin(arr)
  this.maxpisor = this._getMaxp()
  if(origin){
    this.minMulti = this._getMinMulti()
  }
}
maxpisor.prototype._getMin = function(arr) {
  var min = Infinity
  arr.forEach(item => min = (item && item  (item !== min && item != 0) )
    if(exparr.length === 0){
      arr_maxpi = min
      return;
    }
    else{
      var modearr = arr.map(item =>
        (item === min || item === 0)? item : item % min
      )
      maxpisor(modearr)
      }
  }
  maxpisor(this.arr)
  return arr_maxpi
}
maxpisor.prototype._getMinMulti = function(){
  var arr = this.arr,
    arr_minMulti
  var totalmulti =
    arr.reduce((multi,curvalue) => multi * curvalue)
  if (totalmulti === 0) {
    return 0
  }
  else {
    var marr = arr.map((item) => totalmulti/item),
    b = new maxpisor(marr,false)
    arr_minMulti = totalmulti / b.maxpisor
    return arr_minMulti
  }
}
var a = new maxpisor([12,9,6],true)
console.log(a)

付録: 最も一般的でないものを見つける方法複数の数の倍数 変換アルゴリズムの原理の分析

[a1,a2,..,an] を a1,a2,..,an, (a1,a2,..,an) の最小公倍数とする) a1、a2、...、an の最大公約数を表します。ここで、a1、a2、...、an は非負の整数です。 2 つの数値 a、b の場合、[a, b] = ab/(a, b) であるため、2 つの数値の最小公倍数は最大公約数を使用して計算できます。ただし、複数の数値の場合、[a1,a2,..,an]=M/(a1,a2,..,an) は成立せず、M は a1,a2,..,an の積になります。たとえば、[2,3,4] は 24/(2,3,4) と等しくありません。つまり、2 つの数の最大公約数と最小公倍数の関係は、単純に n 個の数の場合に拡張することはできません。

ここでは、複数の数の最小公倍数と複数の数の最大公約数の関係について説明します。 2 つの数値の最大公約数と最小公倍数の関係を n 個の数値の場合に拡張します。これに基づいて、n 個の数値の最大公約数を求めるベクトル変換アルゴリズムを使用して、複数の数値の最小公倍数を計算します。

1.複数の数値の最小公倍数と複数の数値の最大公約数の関係

a1、a2、..、an、a1、a2、..、an 内の 1 つ以上の数値の素因数を p とします。 p について の次数はそれぞれ r1、r2、...、rn です。r1、r2、...、rn の最大値は rc1=rc2=..=rcm=rmax、最小値は rd1=rd2= です。 .=rdt=rmin 、つまり、r1,r2,...,rn の m 個の数に含まれる p の次数が最大値で、t 個の数に含まれる p の次数が最小値です。例: 4、12、および 16 の素因数 2 の次数はそれぞれ 2、2、4 です。最大値として 2 の次数を含む数値が 1 つあり、次数を含む数値が 2 つあります。素数について 因数 3 の次数はそれぞれ 0、1、0 であり、最大値として 3 の次数を含む数が 1 つと、最小値として次数を含む数が 2 つあります。 。

最大公約数については、a1、a2、...、anに含まれる素因数のみが含まれ、各素因数の次数はa1、a2、...、anの素因数の最小次数となります。 、最小次数が 0 は [1] が含まれないことを意味します。

最小公倍数の場合、a1、a2、...、anに含まれる素因数のみが含まれ、各素因数の次数はa1、a2、...、の素因数の最高次数になります。 [1]。

定理 1: [a1,a2,..,an]=M/(M/a1,M/a2,..,M/an)、ここで M は a1,a2,..,an の積です。 a1 、a2、..、an は正の整数です。

例: 4,6,8,10 の場合、[4,6,8,10]=120、M=4*6*8*10=1920、M/(M/a1,M/ a2, ..,M/an) =1920/(6*8*10,4*8*10,4*6*10,4*6*8)=1920/16=120。

証明:

M/a1、M/a2、..、M/an の p の次数は r1+r2+..+rn-rmax 以上であり、p の次数は r1 に等しい+r2+..+rn -rmax.これは、

(1) M/ai の p の次数は r1+r2+..+rn-ri であるため、M/a1,M/a2,..,M/an の p の最小次数は r1 であるためです。 +r2+ ..+rn-rmax.

(2) a1、a2、...、an の p の次数が最大である項目 aj (1 つ以上の項目) について、M/aj の p の次数は r1+r2+..+rn-rmax です。 。

または、a1、a2、...、an の p の次数が最大である項 aj について、M/aj の p の次数は M/ak 以下であり、ここで、ak は a1 のうちの aj 以外です。 a2,..,an の n-1 項の 1 つ、M/aj の p の次数は r1+r2+..+rn-rmax です。

したがって、(M/a1,M/a2,..,M/an) の p の次数は r1+r2+..+rn-rmax なので、M/(M/a1,M/a2,.. , M/an) の p の次数は rmax です。

上記のpはいかなる制限も課しません。 a1、a2、...、an に含まれるすべての素因数は、M/(M/a1,M/a2,...,M/an) の a1,a2,...,an で最高次数であるため、次のようになります。 [a1,a2,...,an]=M/(M/a1,M/a2,...,M/an)が成立する。

認定を取得しましょう。

2 つの数の場合の定理 1 は、[a,b]=ab/(ab/a,ab/b)=ab/(b,a)=ab/(a,b)、つまり [a, b] =ab/(a,b)。したがって、定理 1 は 2 つの数 [a, b] = ab/(a, b) の最小公倍数公式の拡張です。定理 1 を使用すると、複数の数値の最小公倍数を求めることを、複数の数値の最大公約数を求めることに変換できます。

2.複数の数の最大公約数のアルゴリズム実装

定理 1 によれば、複数の数の最小公倍数を求めることは、複数の数の最大公約数を求めることに変換できます。複数の数値 (a1、a2、..、an) の最大公約数を求める従来の方法は、2 つの数値の最大公約数を複数回求めることです。つまり、

(1) ユークリッド除算法を使用します [2 ] a1とa2を計算する (a1, a2)の最大公約数

(2) (a1, a2)とa3の最大公約数をユークリッド割り算で計算し、(a1, a2, a3)を求める

( 3) ユークリッド除算を使って計算します (a1, a2, a3) と a4 の最大公約数を求めます (a1, a2, a3, a4)

(4) これを (a1, a2,...,an) になるまで繰り返します

上記が見つかりました。このメソッドには、n-1 回の進化と除算の操作が必要です。

この記事では、2 つの数のユークリッド除算を n 数のユークリッド除算に拡張します。つまり、n 数のユークリッド除算を一度に使用して、n 数の最大公約数を計算します。基本的な方法は、最小のものを繰り返し使用することです。他を変調する数値 計算は、次の定理 2 に基づいて数値法を使用して実行されます。

定理 2: 複数の非負の整数 a1、a2、...、an について、aj>ai、i が j に等しくない場合、a1、a2、...、an 内の aj を aj-ai に置き換えます。 、およびその最大公約母 数値は変更されません。つまり、(a1,a2,..,aj-1,aj,aj+1,..an)=(a1,a2,..,aj-1,aj) -ai、aj+1、...an)。

例: (34,24,56,68)=(34,24,56-34,68)=(34,24,22,68)。

証明:

交換法則と最大公約数の結合比によれば、

(a1,a2,..,aj-1,aj,aj+1,..an)= ((ai ,aj)、(a1,a2,..,ai-1,ai+1,..aj-1,aj+1,..an)) (i>j の場合)、または

(a1,a2, ..,aj -1,aj,aj+1,..an)= ((ai,aj),(a1,a2,..,aj-1,aj+1,..ai-1,ai+1 ,..an )) (i

そして (a1,a2,..,aj-1,aj-ai,aj+1,..an) には

(a1,a2,..,aj-1,aj-ai,aj+ 1,..an)= ((ai, aj-ai),( a1,a2,..,ai-1,ai+1,.. aj-1,aj+1,..an))(i>; j の場合)、または

(a1,a2,..,aj-1,aj-ai,aj+1,..an)= ((ai, aj-ai),( a1,a2,..,aj -1,aj+1,..ai-1,ai+1,..an)) (i

それでは、(ai, aj) = (ai, aj-ai) であることを証明してください。

(aj-ai) = aj-ai であるため、ai、aj の公約数は (aj-ai) の因数でもある必要があります。つまり、ai、( aj-ai) の公約数でもあります。 aj = (aj-ai)+ai であるため、ai の公約数 (aj-ai) は aj の因数でもある必要があります。つまり、ai、aj の公約数でもあります。したがって、ai の最大公約数、aj と ai の最大公約数、(aj-ai) は等しくなければなりません。つまり、(ai, aj) = (ai, aj-ai) が成り立ちます。

認定を取得しましょう。

定理 2 は行列の初等変換、つまり

ベクトルの最大公約数をベクトルの各成分の最大公約数とする。ベクトル の場合、変換: 1 つの成分を別の成分から減算し、新しいベクトルは元のベクトルの最大公約数に等しくなります。

複数の数値の最大公約数を求めるには、他の数値を最小の数値で繰り返し変調する方法を使用します。つまり、最小の数値より小さい余りが残るまで、最小の数値で他の数値を複数回減算します。 n 個の正の整数を a1、a2、...、an とします。複数の数値の最大公約数を見つけるアルゴリズムは次のように記述されます:

(1) a1、a2、...の中から最小の非ゼロ項 aj を見つけます。 .,an, 最小の非ゼロ項が複数ある場合は、いずれかを選択します

(2) aj 以外に非ゼロ項がない場合、aj を除く他のすべての非ゼロ項 ak は、ak mod aj に置き換えられます。 (4)へ

(3) (3)へ

(4) a1、a2、...、anの最大公約数はaj

例: 5つの数字の場合、34、56、78、24 、85、

( 34, 56, 78, 24, 85)=(10,8,6,24,13)=(4,2,6,0,1)=(0,0,0, 0,1)=1,

6 つの数字 12, 24, 30, 32, 36, 42 には、

(12, 24, 30, 32, 36, 42)=(12,0,6, 8,0,6)=(0,0,0,2,0,6)=(0,0,0,2,0,0)=2。

3. 複数の数値の最小公倍数のアルゴリズム実装

複数の数値の最小公倍数を求めるアルゴリズムは次のとおりです:

(1) m=a1*a2*..*an

( 2) a1, a2,..,an のすべての項 ai は m/ai に置き換えられます

(3) a1, a2,..,an の最小非ゼロ項が複数ある場合は、最小の非ゼロ項 aj を見つけます。ゼロ項の場合は、任意の 1 つを取得します

(4) aj を除く他のすべての非 0 項 ak は、ak mod aj に置き換えられます。aj 以外に他の非 0 項がない場合は、(6) に進みます

(5) (3)へ

(6) 最小公倍数は m/aj です

上記のアルゴリズムは、5 つの乱数の最小公倍数を見つける例の複数のグループを通じて、VC 環境の高級言語でプログラムおよび実装されました。標準的な方法と比較し、正しい性別であることが確認されました。標準的な計算方法は、5 つの乱数の最小公倍数を求めるには 2 つの数の最小公倍数を 4 回求めることで得られ、2 つの数の最小公倍数は 2 つの数の最大公約数を求めることで得られます。

5. 結論

複数の数値の最小公倍数を計算することは、一般的な基本操作です。 n 個の数値の最小公倍数は、他の n 個の数値の最大公約数として表現できるため、複数の数値の最大公約数を求めることで計算できます。複数の数値の最大公約数を見つけるには、ベクトル変換アルゴリズムを使用して、すべてを一度に見つけることができます。

この記事の事例を読んだ後は、その方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。

推奨読書:

Angularを操作してデータリクエストを実装する方法

ノードを操作し、非同期を使用して同時実行性を制御する方法

以上がJSを使用して配列の最小公倍数と最大公約数を見つける方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
舞台裏:JavaScriptをパワーする言語は何ですか?舞台裏:JavaScriptをパワーする言語は何ですか?Apr 28, 2025 am 12:01 AM

JavaScriptはブラウザとnode.js環境で実行され、JavaScriptエンジンに依存してコードを解析および実行します。 1)解析段階で抽象的構文ツリー(AST)を生成します。 2)ASTをコンパイル段階のバイトコードまたはマシンコードに変換します。 3)実行段階でコンパイルされたコードを実行します。

PythonとJavaScriptの未来:傾向と予測PythonとJavaScriptの未来:傾向と予測Apr 27, 2025 am 12:21 AM

PythonとJavaScriptの将来の傾向には、1。Pythonが科学コンピューティングの分野での位置を統合し、AI、2。JavaScriptはWebテクノロジーの開発を促進します。どちらもそれぞれのフィールドでアプリケーションシナリオを拡大し続け、パフォーマンスをより多くのブレークスルーを行います。

Python vs. JavaScript:開発環境とツールPython vs. JavaScript:開発環境とツールApr 26, 2025 am 12:09 AM

開発環境におけるPythonとJavaScriptの両方の選択が重要です。 1)Pythonの開発環境には、Pycharm、Jupyternotebook、Anacondaが含まれます。これらは、データサイエンスと迅速なプロトタイピングに適しています。 2)JavaScriptの開発環境には、フロントエンドおよびバックエンド開発に適したnode.js、vscode、およびwebpackが含まれます。プロジェクトのニーズに応じて適切なツールを選択すると、開発効率とプロジェクトの成功率が向上する可能性があります。

JavaScriptはCで書かれていますか?証拠を調べるJavaScriptはCで書かれていますか?証拠を調べるApr 25, 2025 am 12:15 AM

はい、JavaScriptのエンジンコアはCで記述されています。1)C言語は、JavaScriptエンジンの開発に適した効率的なパフォーマンスと基礎となる制御を提供します。 2)V8エンジンを例にとると、そのコアはCで記述され、Cの効率とオブジェクト指向の特性を組み合わせて書かれています。3)JavaScriptエンジンの作業原理には、解析、コンパイル、実行が含まれ、C言語はこれらのプロセスで重要な役割を果たします。

JavaScriptの役割:WebをインタラクティブでダイナミックにするJavaScriptの役割:WebをインタラクティブでダイナミックにするApr 24, 2025 am 12:12 AM

JavaScriptは、Webページのインタラクティブ性とダイナミズムを向上させるため、現代のWebサイトの中心にあります。 1)ページを更新せずにコンテンツを変更できます。2)Domapiを介してWebページを操作する、3)アニメーションやドラッグアンドドロップなどの複雑なインタラクティブ効果、4)ユーザーエクスペリエンスを改善するためのパフォーマンスとベストプラクティスを最適化します。

CおよびJavaScript:接続が説明しましたCおよびJavaScript:接続が説明しましたApr 23, 2025 am 12:07 AM

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

Webサイトからアプリまで:JavaScriptの多様なアプリケーションWebサイトからアプリまで:JavaScriptの多様なアプリケーションApr 22, 2025 am 12:02 AM

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Python vs. JavaScript:ユースケースとアプリケーションと比較されますPython vs. JavaScript:ユースケースとアプリケーションと比較されますApr 21, 2025 am 12:01 AM

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター