Загрузка данных


#include <stdio.h>

int abs_value(int number);
int divide_by_subtraction(int dividend, int divisor, int *remainder);
int is_divisible(int number, int divisor);
int is_prime(int number);
int largest_prime_divisor(int number);

int main(void) {
    int number;
    char extra;

    if (scanf("%d%c", &number, &extra) != 2 || extra != '\n') {
        printf("n/a");
        return 0;
    }

    printf("%d", largest_prime_divisor(number));

    return 0;
}

int abs_value(int number) {
    if (number < 0) {
        number = -number;
    }

    return number;
}

int divide_by_subtraction(int dividend, int divisor, int *remainder) {
    int quotient = 0;

    dividend = abs_value(dividend);
    divisor = abs_value(divisor);

    if (divisor == 0) {
        return 0;
    }

    while (dividend >= divisor) {
        dividend -= divisor;
        quotient++;
    }

    *remainder = dividend;

    return quotient;
}

int is_divisible(int number, int divisor) {
    int remainder = 0;

    divide_by_subtraction(number, divisor, &remainder);

    return remainder == 0;
}

int is_prime(int number) {
    int result = 1;
    int divisor = 2;

    if (number < 2) {
        result = 0;
    }

    while (divisor * divisor <= number && result) {
        if (is_divisible(number, divisor)) {
            result = 0;
        }
        divisor++;
    }

    return result;
}

int largest_prime_divisor(int number) {
    int max_prime = 1;
    int divisor = 2;

    number = abs_value(number);

    while (divisor <= number) {
        if (is_divisible(number, divisor) && is_prime(divisor)) {
            max_prime = divisor;
        }
        divisor++;
    }

    return max_prime;
}