Witam!
Napisałem taki program do znajdowania nww dwóch liczb:
#include <iostream>
using namespace std;
int pow (int pod, int wyk)
{
for(int i=1; i<wyk; i++)
{
pod*=pod;
}
return pod;
}
int NWW(int a, int b);
const int liczba = 26;
int pierwsze[50] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,73, 79, 83, 89, 97, 101};
int rozklada[30];
int rozkladb[30];
int main()
{
int a, b;
cin >> a >> b;
cout << NWW(a, b);
return 0;
}
int NWW(int a, int b)
{
for(int i=0; i<30; i++)
{
rozklada[i] = 0;
rozkladb[i] = 0;
}
int i = 0;
int nww = 1;
while(a != 1)
{
if(a % pierwsze[i] == 0)
{
rozklada[pierwsze[i]]++;
a/=pierwsze[i];
}
else
i++;
}
int j=0;
while(b != 1)
{
if(b % pierwsze[j] == 0)
{
rozklada[pierwsze[j]]++;
b/=pierwsze[j];
}
else
j++;
}
for(int q=0; q<liczba; q++)
{
if(rozklada[pierwsze[q]] > rozkladb[pierwsze[q]])
nww*=pow(pierwsze[q], rozklada[pierwsze[q]]);
else
nww*=pow(pierwsze[q], rozkladb[pierwsze[q]]);
}
return nww;
}
Program źle działa wyrzuca wielkie liczby.
Uprzedzając ewentualne pytania - musze to napisać bez użycia NWD.
Proszę o pomoc i wskazanie błędu
zaiks