Цикл 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) while
2) 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;
}