#include <stdio.h>
// Функция для нахождения наибольшего простого делителя
int find_largest_prime_divisor(int num) {
// Берем модуль числа (отрицательные числа обрабатываем как положительные)
if (num < 0) {
num = -num;
}
if (num <= 1) {
return -1; // Ошибка
}
int largest_prime = 1;
int divisor = 2;
// Проверяем делители от 2 до num
while (divisor <= num) {
// Проверяем, является ли divisor делителем (через вычитание)
int temp = num;
while (temp >= divisor) {
temp -= divisor;
}
if (temp == 0) { // divisor делит num
// Проверяем, является ли divisor простым
int is_prime = 1;
int check = 2;
while (check * check <= divisor) {
// Проверяем делимость check через вычитание
int t = divisor;
while (t >= check) {
t -= check;
}
if (t == 0) {
is_prime = 0;
break;
}
check++;
}
if (is_prime) {
largest_prime = divisor;
}
// Делим num на divisor (через вычитание)
int new_num = num;
int count = 0;
while (new_num >= divisor) {
new_num -= divisor;
count++;
}
num = count;
divisor = 2;
continue;
}
divisor++;
}
return largest_prime;
}
int main() {
int a;
if (scanf("%d", &a) != 1) {
printf("n/a\n");
return 1;
}
int result = find_largest_prime_divisor(a);
if (result == -1) {
printf("n/a\n");
} else {
printf("%d\n", result);
}
return 0;
}
cd ~/D03T03
# Компилируем
gcc -Wall -Werror -Wextra src/1948.c -o 1948
# Тестируем
echo "100" | ./1948
# Должно вывести: 5
echo "-4" | ./1948
# Должно вывести: 2
echo "13" | ./1948
# Должно вывести: 13
# Проверяем статус
git status
# Добавляем файл
git add src/1948.c
# Делаем коммит
git commit -m "Quest 1: Tom Kilburn - largest prime divisor without division
- Implement find_largest_prime_divisor function
- Use only addition, subtraction, multiplication
- Handle negative numbers by taking absolute value
- Output n/a for invalid input"
# Отправляем на GitLab
git push origin develop