Skip to content

Instantly share code, notes, and snippets.

@muratamuu
Created May 9, 2014 13:09
Show Gist options
  • Save muratamuu/3d0b3727a8721308338b to your computer and use it in GitHub Desktop.
Save muratamuu/3d0b3727a8721308338b to your computer and use it in GitHub Desktop.
Probject Eularの Problem3のプログラム②(Erlang版)
-module(eularProblem3).
-export([answer/0]).
%% Answer of Eular Problem 3 "Largest prime factor"
answer() -> largePrimeFactorOf(600851475143).
largePrimeFactorOf(X) -> largePrimeFactorOf(X, 2).
largePrimeFactorOf(X, P) ->
if X == 1 -> P;
X rem P == 0 -> largePrimeFactorOf(X div P, P);
true -> largePrimeFactorOf(X, nextPrime(P))
end.
nextPrime(X) -> case isPrime(X+1) of
true -> X + 1;
false -> nextPrime(X+1)
end.
isPrime(X) -> isPrime(X, numRange(2, math:sqrt(X))).
isPrime(_, []) -> true;
isPrime(X, [N|NS]) -> case X rem N of
0 -> false;
_ -> isPrime(X, NS)
end.
numRange(Min, Max) when Min > Max -> [];
numRange(Min, Max) -> [Min|numRange(Min+1, Max)].
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment