Online C Compiler
Открыть в компиляторе

Учебная версия на русском. Код и его вывод сохранены в исходном виде.

Циклы: цифры, разворот числа и простота

Сложите цифры целого числа, разверните их порядок и классифицируйте результат.

Открыть в компиляторе

Циклы: цифры, разворот числа и простота
Сложите цифры целого числа, разверните их порядок и классифицируйте результат.

Прочитайте положительное целое N. Найдите сумму цифр и постройте обратное число арифметически, без преобразования в строку. Определите, является ли результат простым, составным или ни тем ни другим для значений не больше единицы.

Выведите ровно три строки с метками Digit Sum:, Reversed: и Status:. Возможные статусы — Prime, Composite и Neither. Не переводите эти слова: они являются частью формата, который проверяют тесты.

Ввод

Одно положительное целое N.

Вывод

Digit Sum: <сумма>
Reversed: <обратное число>
Status: <Prime|Composite|Neither>

Ограничения

  • 1 <= N <= 1 000 000 000
  • Время: 1 секунда. Память: 64 МБ.
  • Тип должен вмещать обратное число.
Подсказки
  • Последнюю цифру даёт % 10, удалить её можно через / 10.
  • Обновляйте reversed = reversed * 10 + digit.
  • Достаточно проверять делители до квадратного корня результата.

Код C

#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;
}
Открыть в компиляторе
Решение и объяснение

Обходите копию N, одновременно накапливая сумму и обратное число. Нули в конце исчезают при развороте целого: 100 превращается в 1.

Сначала обработайте значения меньше двух и делимость на два и три. Затем можно проверять кандидатов 6k - 1 и 6k + 1. Условие divisor <= n / divisor избегает переполнения квадрата.

Сложность O(log10(N) + sqrt(обратного числа)), дополнительная память O(1). Число 4321 составное: 29 × 149 = 4321.

Код решения

#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;
}

Частые вопросы

Почему код и вывод остаются на английском?

Ключевые слова, идентификаторы и строки, проверяемые тестами, сохранены, чтобы не менять программу. Объяснения и элементы управления переведены.