Моя цель состоит в том, чтобы найти первый треугольный номер с 500 делителями, от Project Euler. Это то, что я до сих пор:Скрытые ошибки в коде?
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
, и я получаю тот же номер.
PS: пожалуйста, не пытайтесь сделать свой код смотреть очиститель или предложить замкнутую форму формулы, как я пытаюсь сделать это с моим голым мозгом, которая теперь нуждается в немного помочь :)
Возможно, я что-то недопонимаю, но я получаю: «У ВАС ЕСТЬ ОТВЕТ!»! когда я запускаю это. Это не значит, что ваш код работал? В вашем примере указано, что '864864000' неверен, но что * правильно *? – Shepmaster