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

番号がC++のトロイの木馬番号であるかどうかを確認します


コンセプト

与えられた番号nに関して、タスクはnがトロイの木馬番号であるかどうかを確認することです。トロイの木馬番号は、累乗数のない強力な番号として定義されます。すべての素数除数またはnの因数pについて、p ^ 2も除数である場合、数nは強い数として扱われると言えます。別の言い方をすれば、すべての素因数は少なくとも2回出現します。すべてのトロイの木馬の数が強いことを覚えておく必要があります。ただし、その逆は当てはまりません。つまり、すべての強い数値がトロイの木馬の数値であるとは限りません。a^ bとして表すことができない数値のみであり、aとbは1より大きい正の整数です。

入力

n = 72
72 is expressed as 6×6×2 i.e. (6^2)×2 i.e. Strong Number but without perfect power.

出力

YES

入力

n = 16
16 is expressed as 2×2×2×2 i.e. 2^4 i.e. Strong number with perfect power.

出力

NO

アプローチ

最初に、各素因数のカウントを保存し、カウントが2より大きいかどうかを確認する必要があります。そうすると、それは強い数になります。

次のステップでは、指定された数値がa^bとして表されているかどうかを確認する必要があります。 a ^ bとして表現されていない場合、それは累乗数であると言えます。そうでなければ、それは完璧な力です。最後に、最後のステップで、この与えられた数が完全な力なしで強い場合、その数はトロイの木馬数として扱われると結論付けることができます。

// CPP program to check if a number is
// Trojan Number or not
#include <bits/stdc++.h>
using namespace std;
bool isPerfectPower1(int n1){
   if (n1 == 1)
      return true;
   for (int x1 = 2; x1 <= sqrt(n1); x1++) {
      int y1 = 2;
      int p1 = pow(x1, y1);
      while (p1 <= n1 && p1 > 0) {
         if (p1 == n1)
            return true;
         y1++;
         p1 = pow(x1, y1);
      }
   }
   return false;
}
bool isStrongNumber1(int n1){
   unordered_map<int, int> count1;
   while (n1 % 2 == 0) {
      n1 = n1 / 2;
      count1[2]++;
   }
   for (int i1 = 3; i1 <= sqrt(n1); i1 += 2) {
      while (n1 % i1 == 0) {
         n1 = n1 / i1;
         count1[i1]++;
      }
   }
   if (n1 > 2)
      count1[n1]++;
   int flag1 = 0;
   for (auto b : count1) {
      if (b.second == 1) {
         flag1 = 1;
         break;
      }
   }
   if (flag1 == 1)
      return false;
   else
      return true;
}
bool isTrojan1(int n1){
   if (!isPerfectPower1(n1) && isStrongNumber1(n1))
      return true;
   else
      return false;
}
// Driver Code
int main(){
   int n1 = 72;
   if (isTrojan1(n1))
      cout << "YES";
   else
      cout << "NO";
   return 0;
}

出力

YES

  1. C++でのデュードニー番号

    与えられた数の底の数理論で定義された数は、最初の自然数の桁の合計が2番目の数の桁の合計に等しくなるように、別の自然数の完全な3乗に等しい自然数です。 (ウィキペディア)。 番号はヘンリー・デュードニーによって発見されました 。その数式 は- ここでは、整数nが与えられます。私たちの仕事は、与えられた番号nが人物番号であるかどうかを確認することです。 問題を理解するために例を見てみましょう 入力: N =17592 出力: いいえ 説明: 与えられた番号はダドニー番号ではありません。 ソリューションアプローチ- 解決策は、デュードニー番号の基本的な定義にあります。

  2. 数値がC++で2つの三角数の合計として表現できるかどうかを確認します

    このセクションでは、1つの数を2つの三角数の合計として表現できるかどうかを確認します。三角数は以下のようになります- 例から、1、3、6、10はいくつかの三角数であることがわかります。数N(たとえば16)を2つの三角数(6、10)の合計として表す必要があります。 アプローチは非常に簡単です。 N未満のすべての三角数を取得する必要があります。これらの値からセットを作成します。ここで、集合からXと言う数を取り、N – Xが集合に存在するかどうかを確認する必要があります。そうすると、Xは2つの三角数の合計として表すことができます。 例 #include <iostream> #