Помогите с решением...

Тема в разделе "C/C++/C#", создана пользователем xparen, 24 окт 2010.

  1. xparen

    xparen Гость

    Люди, помогите плз с задачкой на Visual C++ (в консоли).
    ===========================================================================
    Нужно написать программу, вычисляющую наибольшее простое число, являющееся общим делителем двух заданных натуральных
    чисел. Программа должна обеспечивать ввод исходных данных, вывод результатов и диагностических сообщений в особых случаях.
    ===========================================================================
     
  2. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Ну вот самый простой вариант решения
    Код (C++):
    #include <iostream>

    using namespace std;

    void main (void)
    {
    unsigned int A,B,Res = 0,Cout = 0; //Определение A,B, Результата, Количество делителей
    setlocale(LC_ALL,"Russian"); //Локаль Для консоли под Win32, что бы кириллица нормально отображалась
    cout<<"Введите число A: "; //Ввод первого числа
    cin>>A;
    cout<<endl<<"Введите число B: "; //Ввод второго числа
    cin>>B;

    for (unsigned int i=1;i<=A && i<=B; i++) //Перебираем все числа от 1 до (минимального из двух заданных чисел)
    {
    if (A%i + B%i == 0) //Если сумма модулей равна нулю (значит оба модуля числа нулевые)
    {
    Res = i; //Запишим общий делитель
    cout<<"Найден общий делитель :"<<Res<<endl; //Выведим инфу на экран, что мы нашли
    Cout++; //Увеличим счетчик делителей
    }

    }

    cout<<endl<<"Максимальный общий делитель : "<<Res<<endl<<"Промежуточных делителей: "<<(Cout-1)<<endl; //Выведим результат
    system("pause"); //Пауза

    }
     
  3. xparen

    xparen Гость

    а вот еще только хочу спросить как в в код DarkKnight125 вставить проверку на простоту чисел...... думал может сначала для заданных чисел А и В выбрать простые числа, а потом из них найти общие делители..... итог - ни нахождение простых чисел ни часть с нахождением общих делителей не работает((( помогите
     
  4. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Ну если особо код не переделывать, то можно обойтись так :
    Как я помню простое число вроде делиться только на 1 и на само себя... Вроде :)


    Код (C++):
      for (unsigned int i=1;i<=A && i<=B; i++) //Перебираем все числа от 1 до (минимального из двух заданных чисел)
    {
    if (A%i + B%i == 0) //Если сумма модулей равна нулю (значит оба модуля числа нулевые)
    {
    //Тут добавим проверку
    bool prostoe = true; //Идем от противного предположим что число простое
    for (int j=i-1;j>1;j++) // Цикл от [Найденый делитель - 1] до [2]
    {
    if (i%j == 0) prostoe = false; //Если делиться без остатка на любое число из вл. цикла - то оно не просто
    }          
    if (prostoe)
    {
    Res = i; //Запишим общий делитель        
    cout<<"Найден общий делитель :"<<Res<<endl; //Выведим инфу на экран, что мы нашли
    Cout++; //Увеличим счетчик делителей
    }
    }

    }
    Прошу прощение за первонач. невнимательность, пропустил это важное условие
     
  5. xparen

    xparen Гость

    я вот сейчас сам попробывал с 0 написать. Подскажите где моя ошибка считает через раз.
    Код (Text):
    int a,b,i,k,r=0;
    cout<<"Vvedite A: ";
    cin>>a;
    cout<<"Vvedite B: ";
    cin>>b;
    if(a>=b)
    b=k;
    else
    a=k;
    for(i=2;i<=sqrt(k);i++){
    if(k%i==0 && a%i == 0 && b%i == 0){
    r=i;
    cout<<"Obsh prost del :"<<r<<endl;
    }
    else
    cout<<"Prostyh del net ";
    getch();
    }
    предпоследней строчкой getch(); я тупо тормознул зацикливание..... если убрать выдает черти что.......




    Ваш последний вариант не работает...... тупо выдает 1 при любом случае....

    Код (Text):
     for (int j=i-1;j>1;j++)
    помойму здесь вы ошиблись...

    Код (Text):
    //---------------------------------------------------------------------------

    #include <vcl.h>
    #include <iostream.h>
    #include "math.h"
    #pragma hdrstop

    //---------------------------------------------------------------------------

    #pragma argsused
    int main(int argc, char* argv[])
    {
    unsigned int A,B,Res = 0,Cout = 0;

    cout<<"Vvedite A: ";
    cin>>A;
    cout<<endl<<"Vvedite B: ";
    cin>>B;

    for (unsigned int i=1;i<=A && i<=B; i++)
    {
    if (A%i + B%i == 0)
    {
    bool prostoe = true;
    for (int j=i;j<sqrt(i);j++)
    {
    if (i%j == 0) prostoe = false;
    }
    if (prostoe)
    {
    Res = i;
    cout<<"Obshij del :"<<Res<<endl;
    }
    }

    }


    cout<<endl<<"Max obsh del : "<<Res<<endl;
    system("pause");
    return 0;
    }
    //---------------------------------------------------------------------------
    Вот я исправил, на мой взгляд, вашу ошибку. Сейчас все работает отлично.
     
  6. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    for (int j=i-1;j>1;j++) // Цикл от [Найденый делитель - 1] до [2]

    тут действительно ошибся... на автомате ++ поставил, там j--;
    Уменьшается
     
Загрузка...

Поделиться этой страницей