কনসেপ্ট
দেওয়া ধনাত্মক পূর্ণসংখ্যা n সাপেক্ষে, n অকিলিস নম্বর কিনা তা যাচাই করুন। হ্যাঁ হলে 'YES' প্রিন্ট করুন অন্যথায় 'NO'।
অকিলিস নম্বর: গাণিতিকভাবে, অকিলিস নম্বর হল এমন একটি সংখ্যা যা শক্তিশালী (Powerful) কিন্তু পূর্ণ ঘাত (Perfect Power) নয়। একটি সংখ্যা N শক্তিশালী যদি এর সব প্রাইম ফ্যাক্টর p-এর জন্য p²ও N কে ভাগ করে।
প্রথম কিছু অকিলিস নম্বর: ৭২, ১০৮, ২০০, ২৮৮, ৩৯২, ৪৩২, ৫০০, ৬৪৮, ৬৭৫, ৮০০, ৮৬৪, ৯৬৮, ৯৭২, ১১২৫
ইনপুট − 108
আউটপুট − YES
১০৮ শক্তিশালী কারণ ৬ এবং ৩৬ দুটোই এটিকে ভাগ করে এবং এটি পূর্ণ বর্গ নয়।
ইনপুট − 64
আউটপুট − NO
ব্যাখ্যা − ৬৪ শক্তিশালী নম্বর কিন্তু পূর্ণ ঘাত।
পদ্ধতি
- দেওয়া সংখ্যা N শক্তিশালী কিনা যাচাই করুন।
- N পূর্ণ ঘাত কিনা যাচাই করুন।
- যদি N শক্তিশালী হয় কিন্তু পূর্ণ ঘাত না হয়, তবে N অকিলিস নম্বর।
উদাহরণ
#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