Pagini recente » Cod sursa (job #1998194) | Cod sursa (job #161375) | Cod sursa (job #2292442) | Cod sursa (job #520178) | Cod sursa (job #2474246)
use std::fs::File;
use std::io::{BufReader, BufRead, BufWriter, Write};
fn fractii(n: i64) -> i64 {
let mut prim: [i64; 1000004] = [0; 1000004];
for i in 1..=n {
prim[i as usize] = i - 1;
}
let mut sol: i64 = 0;
for i in 2..=n {
sol += prim[i as usize];
let mut j = i + i;
while j <= n {
prim[j as usize] -= prim[i as usize];
j += i;
}
}
sol * 2 + 1
}
fn read(path: &str) -> impl Iterator<Item=i64> {
let br = BufReader::new(File::open(path)
.expect(&format!("Couldn't open {} file", path)));
br.lines()
.map(|line| line.expect("couldn't read line"))
.flat_map(|line| {
line.split_whitespace()
.map(|num| num.parse().expect("not a number"))
.collect::<Vec<i64>>()
})
}
fn main() {
let mut iter = read("fractii.in");
let mut bw = BufWriter::new(File::create("fractii.out")
.expect(&format!("Couldn't create output file")));
if let Some(number) = iter.next() {
write!(bw, "{}", fractii(number));
}
}