Coś mi nie działa. Mam do napisania program szukający NWD spośród dwóch liczb. Metoda, jaką ma się posługiwać, wygląda następująco:
Dana liczba a (np. 54) i b (np. 18)
Dla a, rozkład na czynniki będące liczbami pierwszymi:
54/2 = 27
27/3 = 9
9/3 = 3
3/3 = 1
Dla b, rozkład na czynniki będące liczbami pierwszymi:
18/2 = 9
9/3 = 3
3/3 = 1
Powtarzającymi się elementami rozkładu obu liczb są: 2, 3, 3
233 = 18, co daje nam NWD.
Oto kod:
#include <iostream>
using namespace std;
int mniejsza (int x, int y)
{
if (x>y)
return y;
else
return x;
}
int pierwsza (int n)
{
int s;
for (int k= 1; k<=n; k++)
{
if (n%k == 0)
{
s++;
}
}
if (s == 2)
return true;
else
return false;
}
int nwd (int a, int b)
{
int x = 0, y = 0, c, i, tabla[100], tablb[100];
while (a>1)
{
c = a;
i = 2;
while (c == a)
{
if (a%pierwsza(i)==0)
{
a = a/pierwsza(i);
tabla[x] = pierwsza(i);
x++;
}
i++;
}
}
while (b>1)
{
c = b;
i = 2;
while (c == b)
{
if (b%pierwsza(i)==0)
{
b = b/pierwsza(i);
tablb[y] = pierwsza(i);
y++;
}
i++;
}
}
int T1[100], T2[100];
for (int d = 0; d<x; d++)
{
T1[tabla[d]]++;
}
for (int e = 0; e<y; e++)
{
T2[tablb[e]]++;
}
int f = 0;
for (int g = 1; g<a+b-mniejsza(a, b); g++)
{
f = f + mniejsza(T1[g], T2[g]) * g;
}
return f;
}
int main() {
int a, b;
cin >> a >> b;
cout << nwd (a, b);
return 0;
}
Bardzo proszę o pomoc, co tu nie działa? Mógłbym prosić o poprawioną wersję programu? Z góry dziekuję :)