บทนำ
โจทย์นี้ต้องการหาจำนวนตัวหารของ n² ที่ ไม่ใช่ ตัวหารของ n โดยตรง
ขั้นตอนการแก้ปัญหา
- รับค่า n
- คำนวณ n²
- วนลูปจาก 2 ถึง n²
- ถ้า n² หารด้วย i ลงตัว แต่ n หารด้วย i ไม่ลงตัว → นับเพิ่ม
- แสดงผลรวม
ตัวอย่างโค้ด
#include <bits/stdc++.h>
using namespace std;
int getNumberOfDivisors(int n) {
int n_square = n * n;
int divisors_count = 0;
for (int i = 2; i <= n_square; i++) {
if (n_square % i == 0 && n % i != 0) {
divisors_count++;
}
}
return divisors_count;
}
int main() {
int n = 6;
cout << getNumberOfDivisors(n) << endl;
return 0;
}
ผลลัพธ์
5
คำอธิบายตัวอย่าง n = 6
- n² = 36
- ตัวหารของ 36: 1, 2, 3, 4, 6, 9, 12, 18, 36
- ตัวหารของ 6: 1, 2, 3, 6
- ตัวหารของ 36 ที่ไม่ใช่ตัวหารของ 6: 4, 9, 12, 18, 36 → รวม 5 ตัว
หมายเหตุประสิทธิภาพ
วิธีนี้ใช้เวลา O(n²) อาจช้าเมื่อ n ใหญ่ สามารถปรับปรุงได้ด้วยการหาตัวหารเฉพาะจนถึง √(n²) และใช้ทฤษฎีจำนวน
สรุป
โค้ดนี้เหมาะสำหรับ n ขนาดเล็ก หากต้องการประสิทธิภาพสูง ควรใช้วิธีการแยกตัวประกอบเฉพาะ (Prime Factorization)