ที่นี่เราจะดูวิธาหาความต่างสัมบูรณ์ระหว่างผลรวมของจำนวนเฉพาะทั้งหมด และผลรวมของจำนวนที่ไม่ใช่จำนวนเฉพาะทั้งหมดในอาร์เรย์ ต้องตรวจสอบว่าเลขนั้นเป็นจำนวนเฉพาะหรือไม่ วิธีหนึ่งคือตรวจสอบว่าไม่หารด้วยจำนวนใดๆ ระหว่าง 2 ถึงรากที่สองของตัวเลข ใช้เวลา O(√n) แล้วหาผลรวมและหาความต่างสัมบูรณ์
อัลกอริทึม
diffPrimeNonPrimeSum(arr)
begin
sum_p := sum of all prime numbers in arr
sum_np := sum of all non-prime numbers in arr
return |sum_p - sum_np|
end
ตัวอย่างโค้ด (C++)
#include <iostream>
#include <cmath>
using namespace std;
bool isPrime(int n) {
for (int i = 2; i <= sqrt(n); i++) {
if (n % i == 0)
return false;
}
return true;
}
int diffPrimeNonPrimeSum(int arr[], int n) {
int sum_p = 0, sum_np = 0;
for (int i = 0; i < n; i++) {
if (isPrime(arr[i]))
sum_p += arr[i];
else
sum_np += arr[i];
}
return abs(sum_p - sum_np);
}
int main() {
int arr[] = {5, 8, 9, 6, 21, 27, 3, 13};
int n = sizeof(arr) / sizeof(arr[0]);
cout << "Difference: " << diffPrimeNonPrimeSum(arr, n);
}
ผลลัพธ์
Difference: 50