ทฤษฎี: จำนวนตัวหาร (Divisor Count)
ถ้า n = p₁^e₁ × p₂^e₂ × ... × pₖ^eₖ (prime factorization)
จำนวนตัวหาร: d(n) = (e₁+1)(e₂+1)...(eₖ+1)
d(n) เป็นเลขคี่ ⟺ n เป็น Perfect Square
เพราะ (e+1) เป็นคี่ ⟺ e เป็นเลขคู่ ⟺ ทุก exponent เป็นเลขคู่ ⟺ n เป็นกำลังสองสมบูรณ์
ตัวอย่างโค้ด (Optimal: O(1) check)
public class Demo {
static void checkDivisorCountParity(int n) {
int sqrt = (int) Math.sqrt(n);
if (sqrt * sqrt == n) {
System.out.println(n + " has ODD number of divisors (Perfect Square)");
} else {
System.out.println(n + " has EVEN number of divisors");
}
}
// Brute force verification
static int countDivisorsBrute(int n) {
int count = 0;
for (int i = 1; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
count += (i * i == n) ? 1 : 2;
}
}
return count;
}
public static void main(String[] args) {
int[] tests = {1, 2, 4, 6, 9, 12, 16, 25, 36, 100};
for (int n : tests) {
checkDivisorCountParity(n);
System.out.println(" Divisors: " + countDivisorsBrute(n));
}
}
}
ผลลัพธ์
1 has ODD number of divisors (Perfect Square) Divisors: 1 2 has EVEN number of divisors Divisors: 2 4 has ODD number of divisors (Perfect Square) Divisors: 3 6 has EVEN number of divisors Divisors: 4 9 has ODD number of divisors (Perfect Square) Divisors: 3 12 has EVEN number of divisors Divisors: 6 16 has ODD number of divisors (Perfect Square) Divisors: 5 25 has ODD number of divisors (Perfect Square) Divisors: 3 36 has ODD number of divisors (Perfect Square) Divisors: 9 100 has ODD number of divisors (Perfect Square) Divisors: 9
สรุป
- Perfect Square → จำนวนตัวหารคี่ (1, 4, 9, 16, 25, 36...)
- Non-square → จำนวนตัวหารคู่
- ตรวจสอบได้ใน O(1) ด้วย
Math.sqrt(n)