ตัวอย่างโค้ด
<?php
function divisor_count($my_val) {
$my_count = 0;
for ($i = 1; $i <= sqrt($my_val) + 1; $i++) {
if ($my_val % $i == 0) {
$my_count += ($my_val / $i == $i) ? 1 : 2;
}
}
if ($my_count % 2 == 0) {
echo "It is an even number\n";
} else {
echo "It is an odd number\n";
}
}
divisor_count(100);
?>
ผลลัพธ์
It is an odd number
คำอธิบาย
- Loop $i จาก 1 ถึง √n
- ถ้า $i หาร $my_val ลงตัว → พบ Factor Pair ($i, $my_val/$i)
- ถ้า $i == $my_val/$i (Perfect Square) → Count +1, มิฉะนั้น +2
- ตรวจสอบ $my_count เป็นคู่หรือคี่
Mathematical Insight
จำนวน Divisors (τ(n) หรือ d(n)) เป็น Odd ก็ต่อเมื่อ n เป็น Perfect Square
เพราะ Factors มักอยู่คู่ (a, b) ที่ a×b=n แต่ Perfect Square มี Factor กลางที่ซ้ำ (√n, √n)
ตรวจสอบ 100
100 = 10² (Perfect Square) → Divisors Count = Odd
Divisors: 1, 2, 4, 5, 10, 20, 25, 50, 100 (9 ตัว = Odd) ✓
Optimized Version
<?php
function divisor_parity($n) {
$sqrt = (int)sqrt($n);
return ($sqrt * $sqrt == $n) ? "odd" : "even";
}
echo "100: " . divisor_parity(100) . "\n"; // odd
echo "101: " . divisor_parity(101) . "\n"; // even (prime)
echo "36: " . divisor_parity(36) . "\n"; // odd (6²)
?>
ผลลัพธ์
100: odd 101: even 36: odd
เพียงเช็ค Perfect Square ก็พอ ไม่ต้องนับ Divisors ทั้งหมด!