Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

숫자가 C++에서 아킬레스 숫자인지 확인하십시오.

<시간/>

개념

주어진 양의 정수 n과 관련하여 작업은 n이 아킬레스 수인지 여부를 확인하는 것입니다. N이 아킬레스 수로 취급되면 'YES'를 출력해야 하고 그렇지 않으면 'NO'를 출력해야 합니다.

아킬레스 수:수학과 관련하여 아킬레스 수는 강력한 수로 정의됩니다(수 N은 p의 모든 소인수 p에 대해 p^2도 이를 나눕니다). 하지만 완벽한 힘은 아닙니다.

다음에서 처음 몇 개의 아킬레스 번호가 표시됩니다72, 108, 200, 288, 392, 432, 500, 648, 675, 800, 864, 968, 972, 1125

입력 − 108

출력 − 예

108은 6과 36이 모두 나누기 때문에 강력하며 완전제곱수가 아닙니다.

입력 − 64

출력 - 아니요

설명 − 64는 강력한 숫자이지만 완벽한 거듭제곱입니다.

접근

  • 주어진 숫자 N이 강력한 숫자인지 확인하십시오.

  • N이 완전 거듭제곱인지 확인합니다.

  • N이 강력하지만 완벽하지 않다면 N은 아킬레스 수입니다. 그렇지 않으면 그렇지 않습니다.

예시

// CPP program to check Primorial Prime
#include <bits/stdc++.h>
using namespace std;
bool isPowerful1(int n1){
   while (n1 % 2 == 0) {
      int power1 = 0;
      while (n1 % 2 == 0) {
         n1 /= 2;
         power1++;
      }
      if (power1 == 1)
         return false;
      }
      for (int factor1 = 3; factor1 <= sqrt(n1); factor1 += 2) {
         int power1 = 0;
         while (n1 % factor1 == 0) {
            n1 = n1 / factor1;
            power1++;
         }
         if (power1 == 1)
            return false;
         }
         return (n1 == 1);
      }
      bool isPower1(int a1){
         if (a1 == 1)
            return true;
         for (int i1 = 2; i1 * i1 <= a1; i1++) {
            double val1 = log(a1) / log(i1);
            if ((val1 - (int)val1) < 0.00000001)
               return true;
            }
            return false;
         }
         bool isAchillesNumber1(int n1){
            if (isPowerful1(n1) && !isPower1(n1))
               return true;
            else
               return false;
         }
// Driver Program
int main(){
   int n1 = 108;
   if (isAchillesNumber1(n1))
      cout << "YES" << endl;
   else
      cout << "NO" << endl;
   n1 = 35;
   if (isAchillesNumber1(n1))
      cout << "YES" << endl;
   else
      cout << "NO" << endl;
   return 0;
}

출력

YES
NO