[C++] Algortym NWW

0

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

0

Od razu mówię, że miałem głupi bląd w funkcji pow pisanej na szybko: teraz wygląda ona tak:

int pow (int pod, int wyk)
{
    int stary = pod;
    for(int i=1; i<wyk; i++)
    {
        pod*=stary;
    }
    return pod;
} 
0

Po pierwsze, założenie że nww liczb typu int jest również typu int jest nieprawdziwe.
Po drugie jeżeli nww(a,b) jednak jest typu int, to najprostszy algorytm wyznaczania jest taki:

if(a<b) //przestawiamy a,b
{ 
   int pom=a;
   a=b;
   b=pom;
} 
while((a % b)<>0)
   a+=a;
0

W nocy łatwo o pomyłki ;-)
if(a<b) //przestawiamy a,b żeby zwiększyć efektywność pętli
{
int pom=a;
a=b;
b=pom;
}
int nww=a;
while((nww % b)<>0)
nww+=a;

1 użytkowników online, w tym zalogowanych: 0, gości: 1