แนวคิด
สำหรับจำนวนเต็มบวกที่กำหนด n ภารกิจคือการตรวจสอบว่า n เป็นจำนวนจุดอ่อนหรือไม่ เราต้องพิมพ์ 'YES' หาก N ถูกนับเป็นตัวเลข Achilles มิฉะนั้นให้พิมพ์ 'NO'
เลขจุดอ่อน:ในส่วนที่เกี่ยวกับคณิตศาสตร์ เลขจุดอ่อนถูกกำหนดให้เป็นตัวเลขที่มีพลัง (ตัวเลข N เรียกว่าเป็นตัวเลขที่มีกำลังมาก หากสังเกตว่าสำหรับตัวประกอบเฉพาะ p ทุกตัว p^2 จะหารด้วย) แต่ไม่ใช่พลังที่สมบูรณ์แบบ
ต่อไปนี้จะแสดงหมายเลขจุดอ่อนสองสามตัวแรก72, 108, 200, 288, 392, 432, 500, 648, 675, 800, 864, 968, 972, 1125
ป้อนข้อมูล − 108
ผลผลิต - ใช่
108 มีพลังเท่ากับ 6 และ 36 หารกันและไม่ใช่กำลังสองที่สมบูรณ์แบบ
ป้อนข้อมูล − 64
ผลผลิต − ไม่
คำอธิบาย − 64 เป็นตัวเลขที่ทรงพลังแต่เป็นพลังที่สมบูรณ์แบบ
แนวทาง
-
ตรวจสอบว่าตัวเลขที่กำหนด N เป็นจำนวนที่มีพลังหรือไม่
-
ตรวจสอบว่า N เป็นพลังที่สมบูรณ์แบบหรือไม่
-
ถ้า N มีพลังแต่ไม่สมบูรณ์แบบ N ก็คือเลขจุดอ่อน มิฉะนั้น แสดงว่าไม่ใช่
ตัวอย่าง
// CPP program to check Primorial Prime #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; } // Driver Program 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