Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
66
Task/Arithmetic-numbers/Rust/arithmetic-numbers.rust
Normal file
66
Task/Arithmetic-numbers/Rust/arithmetic-numbers.rust
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
fn divisor_count_and_sum(mut n: u32) -> (u32, u32) {
|
||||
let mut divisor_count = 1;
|
||||
let mut divisor_sum = 1;
|
||||
let mut power = 2;
|
||||
while (n & 1) == 0 {
|
||||
divisor_count += 1;
|
||||
divisor_sum += power;
|
||||
power <<= 1;
|
||||
n >>= 1;
|
||||
}
|
||||
let mut p = 3;
|
||||
while p * p <= n {
|
||||
let mut count = 1;
|
||||
let mut sum = 1;
|
||||
power = p;
|
||||
while n % p == 0 {
|
||||
count += 1;
|
||||
sum += power;
|
||||
power *= p;
|
||||
n /= p;
|
||||
}
|
||||
divisor_count *= count;
|
||||
divisor_sum *= sum;
|
||||
p += 2;
|
||||
}
|
||||
if n > 1 {
|
||||
divisor_count *= 2;
|
||||
divisor_sum *= n + 1;
|
||||
}
|
||||
(divisor_count, divisor_sum)
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let mut arithmetic_count = 0;
|
||||
let mut composite_count = 0;
|
||||
let mut n = 1;
|
||||
while arithmetic_count <= 1000000 {
|
||||
let (divisor_count, divisor_sum) = divisor_count_and_sum(n);
|
||||
if divisor_sum % divisor_count != 0 {
|
||||
n += 1;
|
||||
continue;
|
||||
}
|
||||
arithmetic_count += 1;
|
||||
if divisor_count > 2 {
|
||||
composite_count += 1;
|
||||
}
|
||||
if arithmetic_count <= 100 {
|
||||
print!("{:3} ", n);
|
||||
if arithmetic_count % 10 == 0 {
|
||||
println!();
|
||||
}
|
||||
}
|
||||
if arithmetic_count == 1000
|
||||
|| arithmetic_count == 10000
|
||||
|| arithmetic_count == 100000
|
||||
|| arithmetic_count == 1000000
|
||||
{
|
||||
println!("\n{}th arithmetic number is {}", arithmetic_count, n);
|
||||
println!(
|
||||
"Number of composite arithmetic numbers <= {}: {}",
|
||||
n, composite_count
|
||||
);
|
||||
}
|
||||
n += 1;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue