C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++を使用してnのすべての除数を出力するためのクエリ


与えられた問題では、与えられた整数nのすべての約数を出力する必要があります。

Input: 15
Output: 1 3 5 15
Explanation
Divisors of 15 are: 1,3, 5, 15

Input: 30
Output: 1 2 3 5 15 30

与えられた問題では、エラトステネスのふるいで使用されるアプローチを適用して、nのすべての除数を見つけることができます。

解決策を見つけるためのアプローチ

与えられたアプローチでは、エラトステネスのふるいが基づいている概念を適用し、nの約数を見つけます。

#include <bits/stdc++.h>
#define MOD 1000000007

using namespace std;

vector<int> divisors[100001]; // our vector containing number with all of its divisors
void findsieve(int max) { // filling data in vector divisors till 10e5
   for(int i = 1; i <= max; i++) {
      for(int j = i; j <= max; j += i)
         divisors[j].push_back(i);
   }
}
void __print(int n){ // the function to print divisors
   for(auto x : divisors[n])
      cout << x << " ";
   cout << "\n";
}

int main() {
   findsieve(100000); // we hardcode the sieve and divisors till 10e5
   int n = 6; // the given n
   __print(n);
   n = 30; // new n
   __print(n);
   return 0;
}

出力

1 2 3 6
1 2 3 5 6 10 15 30

上記のコードの説明

このアプローチでは、エラトステネスのふるいと同じ概念に従います。 105までのすべての数値の約数を検索します。qクエリが与えられた場合、除数を検索する必要がないため、qクエリを要求されたときの時間計算量が大幅に削減されます。したがって、複雑さはO(Q * N)になります。ここで、Qは取り組むクエリの数であり、Nはnの約数の数です。

結論

この記事では、問題を解決します。エラトステネスのふるいの原理を適用するnのすべての除数を出力するクエリ。また、この問題のC ++プログラムと、この問題を解決するための完全なアプローチ(Normal)についても学びました。同じプログラムを、C、java、python、その他の言語などの他の言語で作成できます。この記事がお役に立てば幸いです。


  1. すべてのサイクルをC++の無向グラフに出力します

    この問題では、無向グラフが与えられ、グラフに形成されるすべてのサイクルを印刷する必要があります。 無向グラフ 互いに接続されたグラフです。一方向グラフのすべてのエッジは双方向です。無向ネットワークとも呼ばれます。 サイクル グラフのデータ構造は、すべての頂点がサイクルを形成するグラフです。 問題をよりよく理解するための例を見てみましょう- グラフ- 出力- Cycle 1: 2 3 4 5 Cycle 2: 6 7 8 このために、グラフのいくつかのプロパティを利用します。グラフ彩色法を使用して、閉路グラフで発生するすべての頂点に色を付ける必要があります。また、頂点

  2. C++を使用してツリーの奇数レベルでノードを印刷するプログラム

    このチュートリアルでは、特定の二分木の奇数レベルに存在するノードを印刷するプログラムについて説明します。 このプログラムでは、ルートノードのレベルは1と見なされ、同時に代替レベルは次の奇数レベルになります。 たとえば、次の二分木が与えられているとしましょう この場合、この二分木の奇数レベルのノードは1、4、5、6になります。 例 #include <bits/stdc++.h> using namespace std; struct Node {    int data;    Node* left, *right; }; //p