Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

ความต่างสัมบูรณ์ระหว่างผลรวมจำนวนเฉพาะและไม่ใช่จำนวนเฉพาะในอาร์เรย์

ที่นี่เราจะดูวิธาหาความต่างสัมบูรณ์ระหว่างผลรวมของจำนวนเฉพาะทั้งหมด และผลรวมของจำนวนที่ไม่ใช่จำนวนเฉพาะทั้งหมดในอาร์เรย์ ต้องตรวจสอบว่าเลขนั้นเป็นจำนวนเฉพาะหรือไม่ วิธีหนึ่งคือตรวจสอบว่าไม่หารด้วยจำนวนใดๆ ระหว่าง 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