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]
>

C

C++

C++Builder

VC++

C#

Java

Objective-C

D

VB

VB.NET

Delphi

Ada

PL/SQL

T-SQL

関数型

inserted by FC2 system