Skip to content

Instantly share code, notes, and snippets.

@jbrains
Created July 22, 2018 23:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jbrains/dbadc637ea9e088d49220acce830a1be to your computer and use it in GitHub Desktop.
Save jbrains/dbadc637ea9e088d49220acce830a1be to your computer and use it in GitHub Desktop.
Find the number of factors of 5 in natural number n
public static int factorsOfFiveIn(int n) {
int factorsOfFive = 0;
while (n > 1) {
if (n % 5 == 0) factorsOfFive++;
n /= 5;
}
return factorsOfFive;
}
@jbrains
Copy link
Author

jbrains commented Jul 23, 2018

@EffectiveLabs Not quite. 25 has the factor 5 twice, so 25! adds 2 zeroes to the end compared to 24!.

I tried to write what you describe with Vavr (Java FP library) and somehow I got it wrong, which led me in the direction I went in the end. I had tried to map n to n%5==0 and then count all the true values. I still don't know how I got that wrong.

@jbrains
Copy link
Author

jbrains commented Jul 23, 2018

@jonsweimarck Thank you for this! I really like the version with the anonymous functions. I didn't know about iterate(), and Vavr's version also has it. This gives me a direction in which to refactor.

@jbrains
Copy link
Author

jbrains commented Jul 23, 2018

Using Vavr's implementations: divide n by 5 as long as n is a multiple of 5, then count the number of times you successfully divided n by 5.

    public static int factorsOfFiveIn(int n) {
        return Stream.iterate(n, divideBy(5))
                .map(isAMultipleOf(5))
                .takeWhile(isTrue())
                .length();
    }

@jbrains
Copy link
Author

jbrains commented Jul 23, 2018

As a post script, I found an alternative implementation of the larger exercise, which makes factorsOfFiveIn() obsolete. :) I'll publish the whole thing somewhere quite soon.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment