Cod sursa(job #2474271)

Utilizator Rufus007Marincia Catalin Rufus007 Data 14 octombrie 2019 22:08:09
Problema Fractii Scor 90
Compilator rs Status done
Runda Arhiva de probleme Marime 1.35 kb
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 read0(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 read(path: &str) -> i64 {
    let br = BufReader::new(File::open(path)
        .expect(&format!("Couldn't open {} file", path)));
    match br.lines().next() {
        Some(c) => {
            let c = c.unwrap();
            return c.parse::<i64>().unwrap();
        }
        _ => { panic!("not a number") }
    }
}

fn main() {
    let mut bw = BufWriter::new(File::create("fractii.out")
        .expect(&format!("Couldn't create output file")));
    write!(bw, "{}", fractii(read("fractii.in")));
}