Цикл C++ для наименьшего общего кратного

У меня есть некоторые проблемы с этой задачей: вы читаете в выпускном файле "perechi.in" число n, и вы должны записать в файле "perechi.out", сколько пар чисел имеют LCM, равный n. Я написал этот код, но он падает, и я не могу выяснить проблему

 #include <iostream>
    #include <fstream>

using namespace std;

int main()
{
    int a, b, c, ca, cb, i = 0, n;
    ifstream f("perechi.in");
    ofstream g("perechi.out");
    f >> n;
    for (a = 1; a<n; a++){
        for (b = 1; b<n; b++){
            ca = a;
            cb = b;
            c = ca%cb;

            while (c>0){
                ca = cb;
                cb = c;
                c = ca%cb;
            }
            if (ca*cb / c == n){
                i++;
            }
        }
    }
    g << i << "\n";
    f.close();
    g.close();
    return 0;
}

1 ответ

Решение

У вас есть две логические ошибки в вашем коде

1) while2) if (ca*cb / c == n){

Попробуйте следующий код

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
    int a, b, c, ca, cb, i = 0, n;
    ifstream f("perechi.in");
    ofstream g("perechi.out");
    f >> n;
    for (a = 1; a<=n; a++){
        for (b = 1; b<=n; b++){
            ca = a;
            cb = b;
            c = ca%cb;

            if (c>0){
                ca = cb;
                cb = c;
                c = ca%cb;
            }
            if (ca*cb  == n){
                i++;
            }
        }
    }
    g << i << "\n";
    f.close();
    g.close();
    return 0;
}
Другие вопросы по тегам