Online C Compiler
Openen in de compiler

Nederlandse leereditie

C-lussen: cijfers analyseren

Bereken de cijfersom, keer een geheel getal om en bepaal of het resultaat priem is.

Openen in de compiler

C-lussen: cijfers analyseren
Bereken de cijfersom, keer een geheel getal om en bepaal of het resultaat priem is.

Lees een positief geheel getal N. Doorloop de cijfers om ze op te tellen en het omgekeerde getal op te bouwen. Classificeer het resultaat als priem, samengesteld of geen van beide als het kleiner is dan twee.

Gebruik gehele rekenkunde om de cijfers te doorlopen. Voorloopnullen verdwijnen uit het resultaat: 100 wordt 1. De uitvoerteksten blijven Engels om exact met de tests overeen te komen.

Invoer

Een positief geheel getal N.

Uitvoer

Drie regels: Digit Sum: <som>, Reversed: <omgekeerd>, daarna Status: <Prime|Composite|Neither>.

Voorwaarden

  • 1 ≤ N ≤ 10⁹; limiet van 1 seconde en 64 MB.
  • Gebruik een geheel type dat groot genoeg is voor het omgekeerde getal.
Hints
  • Het laatste cijfer is n % 10; n / 10 verwijdert het.
  • Bouw het resultaat met reversed = reversed * 10 + digit.
  • Zoek delers tot de vierkantswortel om priemgetallen te controleren.

Broncode

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

// Function to check if a number is prime
bool is_prime(int n) {
    // TODO: Implement prime checking logic (O(sqrt(N)))
    return false;
}

int main(void) {
    int n;
    if (scanf("%d", &n) != 1) {
        return 1;
    }

    // TODO: 1. Calculate sum of digits
    // TODO: 2. Reverse the integer N
    // TODO: 3. Check if reversed integer is Prime

    // Expected print format:
    // printf("Digit Sum: %d\n", sum);
    // printf("Reversed: %d\n", reversed);
    // printf("Status: %s\n", is_prime(reversed) ? "Prime" : "Composite");

    return 0;
}
Openen in de compiler
Uitleg van de oplossing

Verzamel som en omgekeerd getal in dezelfde lus en behandel waarden onder 2, de 2 en de 3 apart.

Sluit veelvouden van 2 en 3 uit en test kandidaten 6k ± 1. De voorwaarde divisor <= n / divisor vermijdt een kwadraat dat zou kunnen overlopen.

De tijd is O(log₁₀ N + √R), met R het omgekeerde getal, en O(1) extra geheugen. Voor 1234 is 4321 samengesteld: 29 × 149.

Oplossingscode

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

bool is_prime(int n) {
    if (n <= 1) return false;
    if (n <= 3) return true;
    if (n % 2 == 0 || n % 3 == 0) return false;
    for (int i = 5; i * i <= n; i += 6) {
        if (n % i == 0 || n % (i + 2) == 0) return false;
    }
    return true;
}

int main(void) {
    int n;
    if (scanf("%d", &n) != 1) {
        return 1;
    }

    int temp = n;
    int digit_sum = 0;
    int reversed = 0;

    // Loop through digits using modulo and integer division
    while (temp > 0) {
        int rem = temp % 10;
        digit_sum += rem;
        reversed = reversed * 10 + rem;
        temp /= 10;
    }

    printf("Digit Sum: %d\n", digit_sum);
    printf("Reversed: %d\n", reversed);

    if (reversed <= 1) {
        printf("Status: Neither\n");
    } else if (is_prime(reversed)) {
        printf("Status: Prime\n");
    } else {
        printf("Status: Composite\n");
    }

    return 0;
}

Veelgestelde vragen

Waarom blijven code en sommige resultaten Engels?

C-sleutelwoorden, namen, programmacommentaar en verwachte uitvoer blijven gelijk aan het origineel om uitvoerbare code en consistente tests te behouden. Uitleg en instructies zijn vertaald.