সমস্যা বিবরণ
দুটি নম্বর m এবং n দেওয়া আছে। m কি n এর কোনো পাওয়ার (n^k) তা চেক করতে হবে।
উদাহরণ: 8, 2 → true (2³); 100, 10 → true (10²); 0.01, 10 → true (10⁻²); 21, 3 → false
সমাধান
const isPower = (m, n) => {
let sign = m < 1;
if (!m) return false;
while (m !== 1) {
if (sign) m *= n;
else m /= n;
if (sign ? m > 1 : m < 1) return false;
}
return true;
};
console.log(isPower(0.01, 10)); // true
console.log(isPower(1000, 10)); // true
console.log(isPower(1001, 10)); // false
console.log(isPower(8, 2)); // true
console.log(isPower(0.125, 2)); // true
আউটপুট
true true false true true
ব্যাখ্যা
sign: m < 1 হলে নেগেটিভ এক্সপোনেন্ট বুঝায় (ডিভিশন বদলে মাল্টিপ্লিকেশন)।- লুপ চলাকালীন m ১ হয় না।
- ওভারশুট হলে (sign=true এবং m>1, অথবা sign=false এবং m<1) → false।
বিকল্প পদ্ধতি (Math.log)
const isPowerLog = (m, n) => {
if (m <= 0 || n <= 0) return false;
const exp = Math.log(m) / Math.log(n);
return Number.isInteger(exp) || Math.abs(exp - Math.round(exp)) < 1e-10;
};