अवधारणा
दिए गए धनात्मक पूर्णांक n के संबंध में, यह सत्यापित करना है कि n एक अकिलीज़ संख्या है या नहीं। यदि N अकिलीज़ संख्या है तो 'YES' प्रिंट करें अन्यथा 'NO'।
अकिलीज़ संख्या: गणित में, एक अकिलीज़ संख्या वह संख्या है जो शक्तिशाली है (एक संख्या N को शक्तिशाली कहा जाता है यदि प्रत्येक अभाज्य गुणनखंड p के लिए, p^2 भी इसे विभाजित करता है) लेकिन पूर्ण घात नहीं है।
पहली कुछ अकिलीज़ संख्याएं: 72, 108, 200, 288, 392, 432, 500, 648, 675, 800, 864, 968, 972, 1125
उदाहरण
इनपुट - 108
आउटपुट - YES
108 शक्तिशाली है क्योंकि 6 और 36 दोनों इसे विभाजित करते हैं और यह पूर्ण वर्ग नहीं है।
इनपुट - 64
आउटपुट - NO
व्याख्या - 64 शक्तिशाली संख्या है लेकिन पूर्ण घात है।
दृष्टिकोण
- जांचें कि दी गई संख्या N शक्तिशाली है या नहीं।
- जांचें कि N पूर्ण घात है या नहीं।
- यदि N शक्तिशाली है लेकिन पूर्ण घात नहीं है, तो N एक अकिलीज़ संख्या है।
C++ कार्यान्वयन
// CPP program to check Achilles Number
#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;
}
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