C++ program to check whether a number is Trojan Number
In this article, we will learn how to check whether a given number is a Trojan Number or not in C++. A number is said to be a trojan number if it is a strong number but not a perfect power.
Example
Input: N = 108 Output: Yes Input: 9 Output: N0
Note: Every trojan number is a strong number but every strong number is not a trojan number only those that cannot represent as x^y where x, y are positive numbers greater than 1.
Check if it is Trojan Number in C++
Approach: We first create a function perfectPower that helps to check a given number n is prefectPower. Then create a function strongNumber to check whether a given number n is a strong number. Finally, check if n is not a perfect power using perfectPower and n is a strong number using strongNumber then return true else return false
#include <bits/stdc++.h>
using namespace std;
// function to check n is prefect power
bool perfectPower(int n){
if (n == 1)
return true;
for (int i = 2;i<=sqrt(n);i++){
int x = 2;
int p = pow(i, x);
while(p<=n && p>0){
if(p == n)
return true;
x++;
p = pow(i, x);
}
}
return false;
}
// function to check n is strong number
bool strongNumber(int n)
{
unordered_map<int, int> count;
while (n % 2 == 0) {
n = n / 2;
count[2]++;
}
for (int i = 3; i <= sqrt(n); i += 2) {
while (n % i == 0) {
n = n / i;
count[i]++;
}
}
if (n > 2)
count[n]++;
int flag = 0;
for (auto b : count) {
if (b.second == 1) {
flag = 1;
break;
}
}
if (flag == 1)
return false;
else
return true;
}
bool trojan_number(int n){
if ( !perfectPower(n) && strongNumber(n))
return true;
else
return false;
}
int main(){
int n;
cout<<"Enter n value: ";
cin>>n;
if (trojan_number(n))
cout<<"It is a trojan number"<<endl;
else
cout<<"It is not a trojan number"<<endl;
}Output
Enter n value: 108 It is a trojan number Enter n value: 11 It is not a trojan number
Also, read
Leave a Reply