Elias
Elias

Reputation: 1

How to use loops to find the exponent of a base that produces an argument

I am attempting to use loops to find the exponent of a given base that produces a specific argument. For example, in the equation 5^x=625, 5 would be the base and 625 would be the argument. I know that in that equation x=4 but I am unsure of how to get 4 in my return.

Here is what I have so far:

public static int log(int base, int argument) {
    int result = 1;
    for (int i=0; i<=; i++) 
    result = ;
    return result;
}

I am unsure what to put for my condition statement and my result. What am I missing here?

edit: I forgot to mention that I am attempting to do this without using the math library. I also thought it might help to include my code for finding the powers:

public static int pow(int base, int exponent) {
    int result = 1;
    for(int i=0; i<exponent; i++) {
        result = result*base;
    }
    return result;

I essentially just trying to reverse this to find the exponent.

Upvotes: 0

Views: 604

Answers (3)

Jofre
Jofre

Reputation: 3898

Count how many times you can divide the argument by the base while the result is 1 or greater:

public static int log(int base, int argument) {
  int result;
  for (result=0; argument>=1 ; result++) {
    argument = argument/base;
  }
  return result;
}

Upvotes: 0

Nyamiou The Galeanthrope
Nyamiou The Galeanthrope

Reputation: 1214

Something like that:

public static int log(int base, int argument) {
    if(argument <= 0 || base <= 0) {
        throw new IllegalArgumentException("This method only works with positive integers");
    }
    int result = 1;
    int i = 0;
    while(result < argument) {
       result = result * base;
       i++;
    }
    if(result == argument) {
       return i;
    } else {
        throw new IllegalArgumentException("There is no integer for x in base^x = argument");
    }
}

This as some flaws as it handle all cases but it's a start.

Upvotes: 1

Andreas
Andreas

Reputation: 159185

This is more of a math question.

For the formula 5^x = 625, you find x using x = log₅(625) = log(625)/log(5).

So:

public static int log(int base, int argument) {
    return (int) (Math.log(argument) / Math.log(base));
}

But maybe you already knew this, since you named the method right.

Upvotes: 0

Related Questions