diff --git a/Makefile b/Makefile index 765f9c0..2ea49ce 100644 --- a/Makefile +++ b/Makefile @@ -3,4 +3,4 @@ default: ./autoTest.pl clean: - rm -f *.txt primesc primescpp primesaltc primes.class primespas primes*.exe primes.o primesobjc primes.ali primesada primesfor primese primes.h primes1.c primes1.o primes.id primes.make primescbl link.res ppas.sh primes.beam primesocaml primesasm primes.cmi primes.cmx luac.out primeshs primes_clisp.fas primes.lib Main.hi primes_clisp.lib primes_clisp.o primes.hi primescsieve gst.im primesalt2c primesalt3c primesgo + rm -f *.txt primesc primescpp primesaltc primes.class primespas primes*.exe primes.o primesobjc primes.ali primesada primesfor primese primes.h primes1.c primes1.o primes.id primes.make primescbl link.res ppas.sh primes.beam primesocaml primesasm primes.cmi primes.cmx luac.out primeshs primes_clisp.fas primes.lib Main.hi primes_clisp.lib primes_clisp.o primes.hi primescsieve gst.im primesalt2c primesalt3c primesgo primesrs diff --git a/autoTest.pl b/autoTest.pl index 15dadc2..5427ad7 100755 --- a/autoTest.pl +++ b/autoTest.pl @@ -15,7 +15,7 @@ $debug=0; @langs = ("c", # Uncomment for alternat C algorithms # "c2", "ca", "ca2", "ca3", - "objc", "cpp", "asm", "for", "pas", "go", "ada", "hs", "e", "cbl", "oml", "java", "scala", "cs", "vb", "erl", "awk", "pl", "php", "py", "tcl", "rb1.8", "rb1.9", "cl", "scm", "st", "sml", "4th", "pro", "m3", "pike", "lua", "rexx", "r", "fe", "5c", "m4", "sh"); + "objc", "cpp", "asm", "for", "pas", "go", "rs", "ada", "hs", "e", "cbl", "oml", "java", "scala", "cs", "vb", "erl", "awk", "pl", "php", "py", "tcl", "rb", "cl", "scm", "st", "sml", "4th", "pro", "m3", "pike", "lua", "rexx", "r", "fe", "5c", "m4", "sh"); $llen = $#langs+1; @@ -123,6 +123,12 @@ $data{'go'}{'compiler0'} = 'go'; $data{'go'}{'cflags0'} = 'build -o primesgo '; $data{'go'}{'prog'} = 'primesgo'; +$data{'rs'}{'name'} = "Rust"; +$data{'rs'}{'src'} = "primes.rs"; +$data{'rs'}{'compiler0'} = 'rustc'; +$data{'rs'}{'cflags0'} = ' -o primesrs '; +$data{'rs'}{'prog'} = 'primesrs'; + $data{'sml'}{'name'} = "SML"; $data{'sml'}{'src'} = "primes.sml"; #$data{'sml'}{'iflagspre0'} = "echo primes $max | "; @@ -296,13 +302,13 @@ $data{'fe'}{'prog'} = "primes.fe"; $data{'fe'}{'interp0'} = "ferite"; $data{'fe'}{'pre0'} = "echo $max | "; -$data{'rb1.8'}{'name'} = "Ruby 1.8"; -$data{'rb1.8'}{'prog'} = "primes.rb"; -$data{'rb1.8'}{'interp0'} = "ruby1.8"; +#$data{'rb1.8'}{'name'} = "Ruby 1.8"; +#$data{'rb1.8'}{'prog'} = "primes.rb"; +#$data{'rb1.8'}{'interp0'} = "ruby1.8"; -$data{'rb1.9'}{'name'} = "Ruby 1.9.1"; -$data{'rb1.9'}{'prog'} = "primes.rb"; -$data{'rb1.9'}{'interp0'} = "ruby1.9.1"; +$data{'rb'}{'name'} = "Ruby"; +$data{'rb'}{'prog'} = "primes.rb"; +$data{'rb'}{'interp0'} = "ruby"; $data{'java'}{'name'} = "Java"; $data{'java'}{'src'} = "primes.java"; diff --git a/primes.go b/primes.go index e250fce..17f80a2 100644 --- a/primes.go +++ b/primes.go @@ -2,14 +2,14 @@ package main // Go version of a prime number finder -import( +import ( "fmt" + "math" "os" "strconv" - "math" ) -// In stead of in place printing of each prime, it seems +// In stead of in place printing of each prime, it seems // fmt.Println is costly, and causes the program to take // 7x more time, so we gain speed at the expense of RAM // by storing them all in a slice and printing once @@ -18,19 +18,20 @@ func main() { fmt.Println("Usage: go run primes.go [MAX]") return } - primes := make([]int, 0) - max,_ := strconv.Atoi(os.Args[1]) - for i:= 3; i < max; i+=2 { - is_prime := true - for j := 3; j <= int(math.Ceil(math.Sqrt(float64(i)))); j+=2 { - if i % j == 0 { - is_prime = false + //primes := make([]int, 0) + max, _ := strconv.Atoi(os.Args[1]) + for i := 3; i < max; i += 2 { + isPrime := true + for j := 3; j <= int(math.Ceil(math.Sqrt(float64(i)))); j += 2 { + if i%j == 0 { + isPrime = false break } } - if is_prime { - primes = append(primes, i) + if isPrime { + //primes = append(primes, i) + fmt.Println(i) } } - fmt.Println(primes) + //fmt.Println(primes) } diff --git a/primes.go.array b/primes.go.array new file mode 100644 index 0000000..bac776b --- /dev/null +++ b/primes.go.array @@ -0,0 +1,36 @@ +package main + +// Go version of a prime number finder + +import ( + "fmt" + "math" + "os" + "strconv" +) + +// In stead of in place printing of each prime, it seems +// fmt.Println is costly, and causes the program to take +// 7x more time, so we gain speed at the expense of RAM +// by storing them all in a slice and printing once +func main() { + if len(os.Args) < 2 { + fmt.Println("Usage: go run primes.go [MAX]") + return + } + primes := make([]int, 0) + max, _ := strconv.Atoi(os.Args[1]) + for i := 3; i < max; i += 2 { + isPrime := true + for j := 3; j <= int(math.Ceil(math.Sqrt(float64(i)))); j += 2 { + if i%j == 0 { + isPrime = false + break + } + } + if isPrime { + primes = append(primes, i) + } + } + fmt.Println(primes) +} diff --git a/primes.rs b/primes.rs new file mode 100644 index 0000000..a359e3e --- /dev/null +++ b/primes.rs @@ -0,0 +1,28 @@ +use std::env; + +fn main() { + let args: Vec = env::args().collect(); + if args.len() != 2 { + println!("Usage: ./primes $MAX"); + return; + } + let max: u64 = args[1].parse().expect("MAX must be an integer value"); + let mut i: u64 = 3; + + while i <= max { + let loop_max: u64 = (i as f64).sqrt() as u64; + let mut x: u64 = 2; + let mut prime = true; + while x <= loop_max { + if i % x == 0 { + prime = false; + break; + } + x += 1; + } + if prime { + println!("{}", i) + } + i += 2; + } +} \ No newline at end of file