0
如何使用rust-0.10對此進行調試?它適用於較小的號碼,如13195 ... 我覺得我擊球中有單位的一些限制非法指令(核心轉儲)
use std::vec;
use std::num;
use std::iter;
fn int_sqrt(n: uint) -> uint {
num::sqrt(n as f64) as uint
}
fn simple_sieve(limit: uint) -> ~[uint] {
if limit < 2 {
return ~[];
}
let mut primes = vec::from_elem(limit + 1, true);
for prime in iter::range_inclusive(2, int_sqrt(limit) + 1) {
if primes[prime] {
for multiple in iter::range_step(prime * prime, limit + 1, prime) {
primes[multiple] = false
}
}
}
iter::range_inclusive(2, limit).filter(|&n| primes[n]).collect()
}
fn main() {
let limit: uint = 600851475143;
let limithalf: uint = limit/2 as uint;
let primes = simple_sieve(limithalf);
let sieved: ~[uint] = primes.move_iter().filter(|&n| limit % n == 0).collect();
println!("{:?}", sieved);
let mut max = 0;
let f = |x: uint| if x > max { max = x };
for x in sieved.iter() {
f(*x);
}
println!("{}", max);
}
什麼一天。 10分鐘後的另一個答案。謝謝 – rofrol