Optymalizacja prostego algorytmu szukania czy liczba jest potęgą danej liczby.

0

Witam szukam lepszego algorytmicznie rozwiązania szukania czy liczba n jest potęgą danej liczby m.

#include <iostream>
#include <cmath>

using namespace std;

int n,m,temp;

int main(void)
{
    cout<<"Program sprawdza czy dana liczba n jest potega liczby m"<<endl;
    cout<<"n: ";
    cin>>n;
    cout<<"m: ";
    cin>>m;

    temp=m;
    while(temp<=n)
    {
        if(temp=n)
        {
             cout<<n<<" jest potega "<<m;
             temp=temp*m;
        }
        else
        {
            temp=temp*m;
            if(temp==n)
            {
                cout<<n<<" jest potega "<<m;
            }
            else if(temp>n)
            {
                cout<<n<<" NIE jest potega "<<m;
            }
        }
    }

    return 0;
}
0

Może wystarczy ci po prostu działający algorytm. Bo ten który wkleiłeś z pewnością nie działa jak należy

0

Wystarczy pseudokod, ale ten co wkleiłem działa.

1

Jeśli wynik działania log(n,m) jest liczbą całkowitą, to wartość m jest równa wartości n podniesionej do potęgi, która jest liczbą całkowitą. Zapis log(n,m) oznacza logarytm o podstawie n z liczby m i można go przedstawić też w postaci ilorazu logarytmów naturalnych ln(m)/ln(n).
Dobrze by było szukać rozwiązania w oddzielnej funkcji, żeby nie łączyć obliczeń z pobieraniem wartości od użytkownika i wyświetlaniem wyniku.

0

Co Ty w ogóle chcesz optymalizować? Przecież Twój kod dla najbardziej pesymistycznego przypadku wymaga 31 kroków - 2**31 to potęga o największym wykładniku, jaka zmieści Ci się w incie.

Poza tym, jak zwykle, nakombinowane tak, że głowa mała:

#include <stdio.h>

int
main()
{
	int temp, m, n;

	printf("m = ");
	scanf("%d", &m);
	printf("n = ");
	scanf("%d", &n);

	if (m == 1 || n == 1) {
		if (n == 0)
			printf("nie jest\n");
		else
			printf("jest\n");
		return (0);
	}

	temp = n;
	while (temp < m) {
		temp *= n;
	}

	if (temp == m)
		printf("jest\n");
	else
		printf("nie jest\n");
	return (0);
}

Edit: styl, uproszczenie kodu.

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