目次
間隔 [a, b] を指定します。 a と b (「1」以外) を含む範囲で現れる最大の約数を求めます。すべての約数が同じ回数出現する場合は 1 を返します。
この問題を解決する強引な方法は、区間内のすべての数値のすべての約数を見つけて、それらを出現回数とともにマップに保存することです。
方法 2
間隔 [2, 5] を例として考えてみましょう。
ホームページ バックエンド開発 C++ 区間内の最大公約数

区間内の最大公約数

Sep 01, 2023 am 10:09 AM
最大公約数 間隔

区間内の最大公約数

x と y が 2 つの数値であると仮定します。この場合、y を x で割ったときに 0 の余りが返される場合、x は y の約数であると言われます。区間内で発生する最大の約数は、区間内の最大数の要素の約数です。

###問題文###

間隔 [a, b] を指定します。 a と b (「1」以外) を含む範囲で現れる最大の約数を求めます。すべての約数が同じ回数出現する場合は 1 を返します。

例 1

リーリー リーリー

説明

- 2 の約数 = {1, 2}、3 の約数 = {1, 3}、4 の約数 = {1, 2, 4}、5 の約数 = {1, 5}。 2 は最頻約数です。 例 2

リーリー リーリー

説明

- 2 の約数 = {1, 2}、3 の約数 = {1, 3}、4 の約数 = {1, 2, 4}、5 の約数 = {1, 5}。 2 は最頻約数です。 方法 1: ブルート フォース クラッキング

この問題を解決する強引な方法は、区間内のすべての数値のすべての約数を見つけて、それらを出現回数とともにマップに保存することです。

###アルゴリズム###

プロセス除数(数値)

i = 1 ~ n1/2 の場合 1

  • If num%i == 0

  • If num/i == i

  • i がマップにない場合は、(i, 1)

  • を挿入します
  • そうでない場合はマッピング[i]

  • ######他の######
  • i がマップにない場合は、(i, 1)

  • を挿入します
  • そうでない場合はマッピング[i]

  • num/i がマップにない場合は、(num/i, 1)

  • を挿入します。
  • その他のマップ[num/i]

  • maxDivisors (a, b) の処理

  • n = a ~ bの場合

除数 (n)

  • map.erase(1)

  • 除数 = 1、カウント = int_min

  • マップ内の各要素について

  • if it.value > count

  • カウント = it.value

  • 除数 = it.key

  • 例: C 実装

  • 次のプログラムでは、divisors() 関数で各数値の約数を求め、maxdivisor() 関数で最大の約数を求めます。
  • リーリー ###出力### リーリー

    時間計算量 - O(n3/2)。区間内の数値ごとに、約数を見つけるために計算量 O(n1/2) のループが実行されるためです。

  • 空間の複雑さ - O(n)、マップ空間。

方法 2

上記の方法は、除数が出現するたびにマップを埋める時間を短縮することでさらに最適化できます。各数値の約数を見つける代わりに、間隔の下限と上限を計算することで、間隔内の各約数の出現を知ることができます。

間隔 [2, 5] を例として考えてみましょう。

可能な約数のセットは 1 ~ 5 です。したがって、1 = 5/1 - 2/1 1 = 4 が発生します。 2 = 5/2 - 2/2 1 = 2 のようです。 3 = 5/3 - 2/3 = 1 のようです。 4 = 5/4 - 2/4 = 1 のようです。 5 = 5/5 - 2/5 = 1 のようです。

上記は次のように形式化できます。

下限%除数 == 0の場合、occ = 上限/除数 - 下限/除数 1

その他 occ = 上限/除数 - 下限/除数

###アルゴリズム###

maxDivisor (a, b) の処理

i = 2からbの場合

If a%i == 0

回数 = b/i - a/i 1

######他の######
  • 回数 = b/i - a/i

  • map.insert(i, 回)

  • 除数 = 1、カウント = int_min

  • マップ内の各要素について

  • if it.value > count

  • カウント = it.value

  • 除数 = it.key

  • 例: C 実装

    次のプログラムでは、数値の約数を逆の順序で求めるのではなく、各約数について区間内での倍数の数を求めます。
  • リーリー ###出力### リーリー
  • 方法 3

    この問題に対する非常に簡単な解決策を以下に示します。
  • サイズが 1 より大きい区間では、数値の半分 (すべての偶数) が約数として 2 を持ちます。

    したがって、次のように使用できます。
  • ###アルゴリズム###
  • maxDivisors (a, b) の処理

if a == b

ans = a

######他の######

ans = 2

例: C 実装

次のプログラムでは、すべての偶数が約数として 2 を持つという観察を実装します。

リーリー ###出力### リーリー ###結論は###

つまり、区間内の最大の約数を見つけるには、上記の方法を使用できます。時間範囲は O(n3/2) から O(1) で、空間範囲は O(n ) から O(1).

以上が区間内の最大公約数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C++関数マクロ定義の長所と短所は何ですか? C++関数マクロ定義の長所と短所は何ですか? Apr 11, 2024 pm 04:54 PM

関数マクロ定義によりコードが簡素化され、パフォーマンスが向上しますが、型の安全性の確保、デバッグの困難、名前の競合、コードの冗長性などの欠点もあります。メリットとデメリットを比較検討した後、関数マクロを使用する場合は、情報に基づいた決定を下すことが重要です。

C言語を使った最大公約数の求め方を詳しく解説 C言語を使った最大公約数の求め方を詳しく解説 Feb 18, 2024 pm 11:10 PM

C言語で最大公約数を求める方法を詳しく解説 最大公約数(GCD、Greatest Common Divisor)とは、数学でよく使われる概念で、複数の整数のうち最大の約数を指します。 C 言語では、最大公約数を見つけるためにさまざまな方法を使用できます。この記事では、これらの一般的な方法のいくつかについて詳しく説明し、具体的なコード例を示します。方法 1: ユークリッド除算は、2 つの数値の最大公約数を見つけるための古典的な方法です。その基本的な考え方は、2 つの数の約数と余りを連続的に除算することです。

C++の関数呼び出しの仕組みを詳しく解説 C++の関数呼び出しの仕組みを詳しく解説 Apr 11, 2024 pm 02:12 PM

C++ の関数呼び出しメカニズムには、関数に引数を渡してそのコードを実行し、結果が存在する場合にはその結果を返します。パラメーターを渡すには、値渡し (変更は関数内で行われます) と参照渡し (変更は呼び出し元に反映されます) の 2 つの方法があります。値の受け渡しでは、関数内の値の変更は元の値 (printValue など) に影響しませんが、参照の受け渡しでの変更は元の値 (printReference など) に影響します。

ビットコインのレイヤー 1 プロトコルを廃止する 3 か国の状況を把握する: BRC-20、アトミックス、ルーン ビットコインのレイヤー 1 プロトコルを廃止する 3 か国の状況を把握する: BRC-20、アトミックス、ルーン Apr 23, 2024 pm 02:01 PM

原著者: 0xSea.eth ブロック高さ 840,000 で、ビットコインは 4 回目の半減期を迎え、ブロック報酬は 6.25 BTC から 3.125 BTC に減少します。これは暗号化業界全体が注目している大きな出来事です。ビットコインのエコシステム内では、ほぼすべての人が、840,000 ブロックの高さでオンラインになる Runes プロトコルに注目しています。 Runes プロトコルは、ビットコイン層プロトコルのエコシステムの状況をどのように変えるのでしょうか? BRC-20、Atomics、その他のプロトコルにどのような影響がありますか?オブザーバーおよびプレイヤーとして、半減期とルーンの発売の前夜に、市場についての最近の考えをいくつか整理したいと思います。 Core Viewpoint 1/ビットコインの 1 層トークン プロトコルは BRC-20、Aとみを形成します

C言語で最大公約数を求める方法 C言語で最大公約数を求める方法 Sep 27, 2023 am 09:41 AM

最大公約数は、C 言語のユークリッド アルゴリズムを使用して求めることができます。原理は、2 つの整数 a と b の最大公約数は、a を b で割った余りと、c と b の最大公約数に等しいというものです。このアルゴリズムは非常に効率的であり、大きな数を扱う場合でも迅速に解決できます。

C言語プログラミングを使用して最大公約数を解く C言語プログラミングを使用して最大公約数を解く Feb 21, 2024 pm 07:30 PM

タイトル: C 言語プログラミングを使用して最大公約数ソリューションを実装する 最大公約数 (Greatest Common Divisor、略して GCD) とは、2 つ以上の整数を同時に除算できる最大の正の整数を指します。最大公約数を解くことは、一部のアルゴリズムや問題解決に非常に役立ちます。この記事では、最大公約数を求める機能をC言語プログラミングで実装し、具体的なコード例を紹介します。 C 言語では、ユークリッド アルゴリズムを使用して最大値を解くことができます。

ペアをその積に置き換えることによって、配列内の最大公約数を 1 より大きくできるかどうかを確認します ペアをその積に置き換えることによって、配列内の最大公約数を 1 より大きくできるかどうかを確認します Aug 31, 2023 pm 06:49 PM

この記事では、C++ に焦点を当て、さまざまなプログラミング言語における配列の最大公約数 (GCD) に関する興味深い質問を探ることを目的としています。ペアごとの要素交換とその積の数を利用して、GCD を 1 より大きく改善できるかどうかを検証するアルゴリズム アプローチを示します。さらに、この問題を解決する他の方法を、それぞれの構文定義とともに提供します。これらのソリューションに加えて、これらのメソッドを含む 2 つの完全な実行可能コードも紹介します。構文 以下のコード例を明確に理解するには、その前に使用される構文を評価して理解する必要があります。 #include<iostream>#include<vecto

C言語で最大公約数を求める方法 C言語で最大公約数を求める方法 Feb 20, 2024 pm 08:45 PM

C 言語で最大公約数を求める実装方法については、具体的なコード例が必要です 最大公約数とは、2 つ以上の整数が共有する約数の最大値のことを最大公約数といいます。アルゴリズム設計では、最大公約数を見つけることがよくある問題です。以下では、C 言語で最大公約数を実装するいくつかの方法を詳細に紹介し、具体的なコード例を示します。方法 1: ブルート フォース法 ブルート フォース法は、考えられるすべての約数を調べて、最大公約数として最大の約数を見つけるという単純かつ直接的な方法です。 #含む

See all articles