Определить, являются ли два заданных натуральных числа взаимно простыми - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Добрый день. Пока не очень хорошо разбираюсь в Си и по этому прошу помощи. Нужно написать насколько программ для решения задач. Заранее благодарен 1) Определить, являются ли два заданных натуральных числа взаимно простыми (взаимно простые числа не имеют общих делителей, кроме 1). 2) Дан целочисленный массив В(40). Заменить первые 20 элементов этого массива минимальным, а вторые 20 – максимальным элементом этого массива.

Решение задачи: «Определить, являются ли два заданных натуральных числа взаимно простыми»

textual
Листинг программы
/*
 ============================================================================
 Name        : c_coprime.c
 Author      : UranFlex @gmail.com
 Version     : 0.1 alpha
 License     : Free for all
 Copyright   : UranFlex 2013
 Description : Определить, являются ли два заданных натуральных числа взаимно простыми
 *             C, Ansi-style
 ============================================================================
 */
 
#include <stdio.h>
#include <stdlib.h>
 
// функция находит наибольший общий делитель двух целых чисел
int GCD( int first, int second );
 
int main( void ) {
    // ввод данных
    int x, y;
    printf( "Введите два натуральных числа через пробел " );
    scanf( "%d%d", &x, &y );
 
    // проверяем натуральные ли введенные числа
    if ( x <= 0 || y <= 0 ) {
        puts( "Ошибка ввода!" );
        return EXIT_FAILURE;
    }
 
    // если у двух натуральных чисел НОД равен 1
    if ( GCD( x, y ) == 1 ) // то они взаимно простые
        puts( "Данные два числа являются взаимно простыми" );
    else
        puts( "Данные два числа НЕ являются взаимно простыми" );
    return EXIT_SUCCESS;
}
 
int GCD( int first, int second ) {
    int temp; 
    while ( second ) {
        temp = first % second;
        first = second;
        second = temp;
    }
    return abs( first );
}

Объяснение кода листинга программы

В данном коде на языке C реализована функция, которая определяет, являются ли два заданных натуральных числа взаимно простыми. Список действий, которые выполняются в коде:

  1. В функции main() объявляются две переменные типа int - x и y, которые будут использоваться для хранения введенных пользователем чисел.
  2. С помощью функции scanf() происходит считывание двух натуральных чисел от пользователя.
  3. Далее происходит проверка натуральности введенных чисел. Если хотя бы одно из чисел не является натуральным, выводится сообщение об ошибке и программа завершается с кодом EXIT_FAILURE.
  4. Если оба числа являются натуральными, вызывается функция GCD(), которая находит наибольший общий делитель (НОД) двух чисел.
  5. Если НОД равен 1, то числа являются взаимно простыми, и выводится соответствующее сообщение.
  6. Если НОД не равен 1, то числа не являются взаимно простыми, и выводится соответствующее сообщение.
  7. В конце функции main() возвращается код EXIT_SUCCESS. Функция GCD() реализована с использованием алгоритма Евклида. Список действий в функции GCD():
  8. Переменная temp инициализируется значением первого аргумента функции.
  9. В цикле while() происходит считывание второго аргумента функции до тех пор, пока он не станет равным 0.
  10. На каждой итерации цикла происходит нахождение остатка от деления temp на second.
  11. Значение temp заменяется на значение second, а second заменяется на остаток от деления.
  12. После завершения цикла, в переменной first хранится наибольший общий делитель двух чисел.
  13. Для корректного сравнения чисел в функции main() функция abs() используется для получения абсолютного значения числа.
  14. В конце функции GCD() возвращается полученное значение first.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.833 из 5
Похожие ответы