与えられた数が互いに素であるかどうかをチェックするC++プログラム
配列numsにn個の整数があるとします。配列内の数値が互いに素であるか、互いに素であるか、互いに素でないかを確認する必要があります。
-
gcd(nums [i]、nums [j])=1の場合、2つの数nums[i]とnums[j]は互いに素であると言われます。これは、配列内のすべての数のペアに当てはまり、i
-
gcd(nums [i])=1の場合、数値は互いに素であると言われます。
-
どちらでもない場合は、互いに素ではないと言います。
したがって、入力がn =4、nums ={7、11、13、17}のような場合、出力は互いに素な数値になります。
配列内のすべての数値ペアをチェックすると、それらのgcdは常に1になります。
これを解決するには、次の手順に従います-
Define an array fac of size: 100 initialized with 0s. Define an array checkPrime of size: 100 initialized with 0s. gcdVal := 0 for initialize i := 0, when i < n, update (increase i by 1), do: gcdVal := gcd of (nums[i], gcdVal) (increase fac[nums[i]] by 1) if gcdVal is same as 1, then: pw := true for initialize k := 2, when k < 100, update (increase k by 1), do: if checkPrime[k] is non-zero, then: Ignore following part, skip to the next iteration c := 0 for initialize j := k, when j < 100, update j := j + k, do: c := c + fac[j] checkPrime[j] := true pw := pw AND true if c <= 1 if pw is non-zero, then: print("The numbers are pairwise coprime") Otherwise print("The numbers are setwise coprime") Otherwise print("The numbers are not coprime")
例
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h> using namespace std; void solve(int n, int nums[]){ int fac[100] = {0}; bool checkPrime[100] = {0}; int gcdVal = 0; for(int i = 0; i < n ; i++) { gcdVal = __gcd(nums[i], gcdVal); ++fac[nums[i]]; } if(gcdVal == 1) { bool pw = true; for(int k = 2; k < 100; ++k) { if(checkPrime[k]) continue; int c = 0; for(int j = k; j < 100; j += k) { c += fac[j]; checkPrime[j] = true; } pw = pw && c <= 1; } if(pw) cout<< "The numbers are pairwise coprime"; else cout<< "The numbers are setwise coprime"; } else cout << "The numbers are not coprime"; } int main() { int n = 4, nums[] = {7, 11, 13, 17}; solve(n, nums); return 0; }
入力
4, {7, 11, 13, 17};
出力
The numbers are pairwise coprime
-
特定のツリーグラフが線形であるかどうかをC++で確認します
ここでは、ツリーグラフが線形であるかどうかを確認する方法を説明します。線形ツリーグラフは1行で表すことができます。これが線形ツリーグラフの例であると仮定します。 しかし、これは線形ではありません- グラフが線形であるかどうかを確認するには、2つの条件に従うことができます ノードの数が1の場合、ツリーグラフは線形です ノードの(n – 2)が次数2の場合 例 #include <iostream> #include <vector> #define N 4 using namespace std; class Graph{ p
-
数値が素数であるかどうかをチェックするC++プログラム
素数は1より大きい整数であり、素数の唯一の要素は1とそれ自体でなければなりません。最初の素数のいくつかは-です 2, 3, 5, 7, 11, 13 ,17 数が素数かどうかをチェックするプログラムは次のとおりです。 例 #include <iostream> using namespace std; int main() { int n=17, i, flag = 0; for(i=2; i<=n/2; ++i) { if(n%i==0) { &nbs