-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.rs
More file actions
41 lines (34 loc) · 987 Bytes
/
main.rs
File metadata and controls
41 lines (34 loc) · 987 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
use std::time::Instant;
fn get_triangle_number(n: i64) -> i64{
n*(n+1)/2
}
fn is_triangle(t: i64) -> bool{
let discriminant: i64 = 1 + 8*t;
let root: i64 = (discriminant as f64).sqrt() as i64;
root*root==discriminant && (1 + root) % 2 == 0
}
fn is_pentagonal(p: i64) -> bool{
let discriminant: i64 = 1 + 24*p;
let root: i64 = (discriminant as f64).sqrt() as i64;
root*root==discriminant && (1 + root) % 6 == 0
}
fn is_hexagonal(h: i64) -> bool{
let discriminant: i64 = 1 + 8*h;
let root: i64 = (discriminant as f64).sqrt() as i64;
root*root==discriminant && (1 + root) % 4 == 0
}
fn main() {
let start = Instant::now();
let mut i: i64 = 286;
let mut n: i64;
loop{
n = get_triangle_number(i);
if is_pentagonal(n) && is_hexagonal(n){
break;
}
i += 1;
}
let stop = Instant::now();
let elapsed = stop - start;
println!("T({i})={n}=P(?)=H(?) (elapsed={elapsed:?})");
}