Online C Compiler
Buka di kompiler

Edisi pembelajaran bahasa Indonesia. Kode dan keluarannya tetap seperti aslinya.

Bilangan prima dalam C

Periksa pembagi hingga akar kuadrat dan tangani bilangan di bawah dua dengan benar.

Buka di kompiler

Bilangan prima dalam C
Periksa pembagi hingga akar kuadrat dan tangani bilangan di bawah dua dengan benar.

Bilangan prima adalah bilangan bulat lebih dari satu dengan tepat dua pembagi positif. Nol, satu, dan bilangan negatif bukan prima. Jika N komposit, setidaknya satu faktornya tidak melebihi akar kuadratnya.

Singkirkan bilangan genap kecuali dua, lalu periksa pembagi ganjil. Untuk bilangan positif besar, kondisi divisor <= N / divisor menghindari overflow divisor * divisor. Berhentilah ketika pembagi ditemukan.

Uji 1, 2, kuadrat seperti 49, dan sebuah bilangan prima. Pembagian percobaan membutuhkan waktu O(sqrt(N)) dan ruang tambahan O(1).

Kode C

#include <stdio.h>
#include <stdbool.h>

bool is_prime_optimized(int n) {
    if (n <= 1) return false;
    if (n <= 3) return true;
    if (n % 2 == 0 || n % 3 == 0) return false;

    // Check factors 6k +/- 1 up to sqrt(n)
    for (int i = 5; (long long)i * i <= n; i += 6) {
        if (n % i == 0 || n % (i + 2) == 0) {
            return false;
        }
    }
    return true;
}

int main(void) {
    int test_numbers[] = {1, 2, 17, 25, 29, 49, 97, 100};
    int total = sizeof(test_numbers) / sizeof(test_numbers[0]);

    printf("--- Prime Number Verification ---\n");
    for (int i = 0; i < total; i++) {
        int val = test_numbers[i];
        printf("%3d -> %s\n", val, is_prime_optimized(val) ? "PRIME" : "NOT prime");
    }

    printf("\nPrimes between 1 and 50:\n");
    for (int i = 1; i <= 50; i++) {
        if (is_prime_optimized(i)) {
            printf("%d ", i);
        }
    }
    printf("\n");

    return 0;
}
Buka di kompiler

Keluaran yang diharapkan

--- Prime Number Verification ---
  1 -> NOT prime
  2 -> PRIME
 17 -> PRIME
 25 -> NOT prime
 29 -> PRIME
 49 -> NOT prime
 97 -> PRIME
100 -> NOT prime

Primes between 1 and 50:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 

Pertanyaan umum

Mengapa kode dan keluarannya tetap dalam bahasa Inggris?

Kata kunci, pengenal, dan teks yang diperiksa tes dipertahankan agar program tidak berubah. Penjelasan dan kontrol telah diterjemahkan.