home
>
Project Euler
>
ForNext
Shut the fuck up and write some code
Problem 3
最大の素因数
13195 の素因数は 5, 7, 13, 29 である.
600851475143 の素因数のうち最大のものを求めよ.
Largest prime factor
The prime factors of 13195 are 5, 7, 13 and 29.
What is the largest prime factor of the number 600851475143 ?
VBScript
JScript
Perl
PHP
Python
Ruby
PowerShell
Scala
更新日 : 2013.01.03
scala> def max_factor(n: Int, factor: Int = 2): Int = { | if (n < factor * factor) n | else if (n % factor == 0 ) max_factor(n / factor, factor ) | else max_factor(n , factor + 1) | } max_factor: (n: Int,factor: Int)Int scala> max_factor(8) res0: Int = 2 scala> max_factor(9) res1: Int = 3 scala> max_factor(13195) res2: Int = 29 scala> max_factor(600851475143) <console>:1: error: integer number too large max_factor(600851475143) ^ scala> def max_factor(n: Long, factor: Long = 2): Long = { | if (n < factor * factor) n | else if (n % factor == 0 ) max_factor(n / factor, factor ) | else max_factor(n , factor + 1) | } max_factor: (n: Long,factor: Long)Long scala> max_factor(600851475143) <console>:1: error: integer number too large max_factor(600851475143) ^ scala> max_factor(600851475143L) res3: Long = 6857 scala>
scala> def factor_list(n: Long, factor: Long = 2): List[Long] = { | if (n < factor * factor) List(n) | else if (n % factor == 0 ) factor::factor_list(n / factor, factor ) | else factor_list(n , factor + 1) | } factor_list: (n: Long,factor: Long)List[Long] scala> factor_list(13195) res0: List[Long] = List(5, 7, 13, 29) scala> factor_list(600851475143L) res1: List[Long] = List(71, 839, 1471, 6857) scala>
F#
更新日 : 2013.01.04
> let rec factor_list (n, factor) = - if n < factor * factor then [n] - elif n % factor = 0 then factor::factor_list(n / factor, factor ) - else factor_list(n , factor + 1) - ;; val factor_list : int * int -> int list > factor_list(13195, 2);; val it : int list = [5; 7; 13; 29] > factor_list(600851475143, 2);; factor_list(600851475143, 2);; ------------^^^^^^^^^^^^ stdin(29,13): error FS1147: This number is outside the allowable range for 32-bit signed integers > factor_list(600851475143L, 2);; factor_list(600851475143L, 2);; ------------^^^^^^^^^^^^^ stdin(7,13): error FS0001: This expression was expected to have type int but here has type int64 > let rec factor_list (n:int64, factor) = - if n < factor * factor then [n] - elif n % factor = 0 then factor::factor_list(n / factor, factor ) - else factor_list(n , factor + 1) - ;; elif n % factor = 0 then factor::factor_list(n / factor, factor ) -------------------------------------------^^^^^^ stdin(10,44): error FS0001: The type 'int' does not match the type 'int64' > let rec factor_list (n:int64, factor:int64) = - if n < factor * factor then [n] - elif n % factor = 0 then factor::factor_list(n / factor, factor ) - else factor_list(n , factor + 1) - ;; elif n % factor = 0 then factor::factor_list(n / factor, factor ) ----------------------^ stdin(15,23): error FS0001: This expression was expected to have type int64 but here has type int > let rec factor_list (n:int64, factor:int64) = - if n < factor * factor then [n] - elif n % factor = 0L then factor::factor_list(n / factor, factor ) - else factor_list(n , factor + 1L) - ;; val factor_list : int64 * int64 -> int64 list > factor_list(600851475143L, 2L);; val it : int64 list = [71L; 839L; 1471L; 6857L] >