代码中隐藏的逻辑错误?
Hidden Logic errors in code?
我的目标是从 Project Euler 中找到第一个有 500 个因数的三角数。这是我目前所拥有的:
use std::num::Float;
fn main() {
let mut num = vec!(1 , 3 , 6 , 10);
let mut a = 0us;
let mut fac = vec![];
for _ in (0us..1000000us) {
let x =
num[num.len() - 1] - num[num.len() - 2] + 1 +
num[num.len() -
1]; //extremely clever way of listing triangle numbers(not to be cocky :))
num.push(x);
}
println!("{:?}" , num);
println!("Calculating...");
let mut _i = 1is;
for _ in (0us..num.len() as usize) {
for _ in (1us..(num[a] as f64).sqrt() as usize) { //Logic Error
if num[a] % _i == 0 { fac.push(_i); }
//print!("{},\n" , res.len()); }
_i += 1;
}
fac.push(num[a] as isize,);
if fac.len() >= 10 {println!("Length: {}\nVector: {:?}\nValue: {}\n\nYOU GOT THE ANSWER! WOOT! \x07", fac.len(), fac, num[a]); break;}
_i = 1;
fac = vec![];
a+=1
}
}
但这会打印出“864864000”作为不正确的值,这对我来说没有意义,我已经尝试过499
(因为向量不包含数字本身)并且501
和 502
和我得到相同的数字。
P.S:请不要试图让我的代码看起来更简洁或提出封闭形式的公式,因为我正试图用我的大脑来做这件事,现在需要一点帮助: )
很可能,您的错误来自于将一个非常大的整数转换为 f32,然后进行比较(这会降低准确性)
计算除数时,不能停在数字的平方根处。充其量,您可以在 n/i
处停止,其中 n
是您计算其除数的数字,而 i
是大于 1 的最低除数。
例如,在计算 12 的除数时,您只会尝试除以 1、2 和 3,这样得到的除数将是 4 而不是 6,因为它漏掉了 4 和 6。这个结果在你发现除数比实际数字少得多。
可能这来自于包含被称为 fac
的除数的向量,这表明它们是因数而不是除数。
我的目标是从 Project Euler 中找到第一个有 500 个因数的三角数。这是我目前所拥有的:
use std::num::Float;
fn main() {
let mut num = vec!(1 , 3 , 6 , 10);
let mut a = 0us;
let mut fac = vec![];
for _ in (0us..1000000us) {
let x =
num[num.len() - 1] - num[num.len() - 2] + 1 +
num[num.len() -
1]; //extremely clever way of listing triangle numbers(not to be cocky :))
num.push(x);
}
println!("{:?}" , num);
println!("Calculating...");
let mut _i = 1is;
for _ in (0us..num.len() as usize) {
for _ in (1us..(num[a] as f64).sqrt() as usize) { //Logic Error
if num[a] % _i == 0 { fac.push(_i); }
//print!("{},\n" , res.len()); }
_i += 1;
}
fac.push(num[a] as isize,);
if fac.len() >= 10 {println!("Length: {}\nVector: {:?}\nValue: {}\n\nYOU GOT THE ANSWER! WOOT! \x07", fac.len(), fac, num[a]); break;}
_i = 1;
fac = vec![];
a+=1
}
}
但这会打印出“864864000”作为不正确的值,这对我来说没有意义,我已经尝试过499
(因为向量不包含数字本身)并且501
和 502
和我得到相同的数字。
P.S:请不要试图让我的代码看起来更简洁或提出封闭形式的公式,因为我正试图用我的大脑来做这件事,现在需要一点帮助: )
很可能,您的错误来自于将一个非常大的整数转换为 f32,然后进行比较(这会降低准确性)
计算除数时,不能停在数字的平方根处。充其量,您可以在 n/i
处停止,其中 n
是您计算其除数的数字,而 i
是大于 1 的最低除数。
例如,在计算 12 的除数时,您只会尝试除以 1、2 和 3,这样得到的除数将是 4 而不是 6,因为它漏掉了 4 和 6。这个结果在你发现除数比实际数字少得多。
可能这来自于包含被称为 fac
的除数的向量,这表明它们是因数而不是除数。