Problem 6
The sum of the squares of the first ten natural numbers is,
1^2 + 2^2...+10^2 = 385
The square of the sum of the first ten natural numbers is,
(1+2+...+10)^2 = 55^2 = 3025
Hence the difference between the sum of the squares of the first ten natural numbers and the square of the sum is .
3025 - 385 = 2640
Find the difference between the sum of the squares of the first one hundred natural numbers and the square of the sum.
This seems pretty straight forward.
we need a sum of squares function and a square of sums function and then subtract the two.
Sounds easy...
My approach
fn main() {
let test_u_limit = 100;
let x = square_of_sums(test_u_limit) - sum_of_squares(test_u_limit);
println!("{}", x);
}
Here's my main function. Straight forward. Subtract the returns of two functions.
Let's tackle the sum of squares function.
fn sum_of_squares(u_limit: i64) -> i64{
let mut ans = 0;
for x in 1..=u_limit{
ans = ans + (x^2);
}
println!("Sum of squares is {}", ans);
return ans
}
I went with i64 on the off chance that the value might exceed 2147483647. It doesn't but I didn't know that. I guess, I could refactor it to i32 since I have to refactor it to get it to work.
Oh yeah, this doesn't work. Fun fact... the ^ symbol doesn't raise to a power. Nope. It's a bitwise operator. This doesn't work.
According to stack overflow, to raise to a power it should read x.pow(2). pow takes an unsigned 32 bit int and returns a signed 32 bit int.
so the refined code reads...
fn sum_of_squares(u_limit: i64) -> i64{
let mut ans = 0;
for x in 1..=u_limit{
ans = ans + x.pow(2);
}
return ans
}
not a huge change but it works. Unfortunately, I did the same thing with the square of sums function but I fixed it at the same time I did the previous refactor.
fn square_of_sums(u_limit: i64) -> i64{
let mut ans = 0;
for x in 1..=u_limit{
ans += x;
}
ans = ans.pow(2);
return ans
}
Other guys code
eathren had almost the same idea. except he approached the power issue manually.
doing i*i instead of i.pow(2)
Still works but I wonder if he ran into the same issue I did with the ^ symbol.
He also opted for 1..n+1 instead of 1..=n I wonder if there's a performance advantage to that.
Final thoughts
I'm discovering that there aren't alot of answers in Rust on these problem sites. Most of the answers I'm seeing are from the last 4 months. It seems like it's picking up steam. I'm getting more comfortable with it. I thought it would be a lot harder. Not that it's easy just... it's easier than I had anticipated. Till next time.
No comments:
Post a Comment