Cod sursa(job #2474280)

Utilizator Rufus007Marincia Catalin Rufus007 Data 14 octombrie 2019 22:31:59
Problema Fractii Scor 30
Compilator rs Status done
Runda Arhiva de probleme Marime 1.4 kb
use std::fs::File;
use std::io::{BufReader, BufRead, BufWriter, Write};

fn fractii(n: i64) -> i32 {
//    let mut prim: [i64; 1000004] = [0; 1000004];
let mut prim=vec![0;(n+1) as usize];
    for i in 1..=n {
        prim[i as usize] = (i - 1) as i32;
    }

    let mut sol: i32 = 0;
    let n: usize = n as usize;
    for i in 2..=n {
        sol += prim[i];

        let mut j = i + i;
        while j <= n {
            prim[j] -= prim[i];
            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")));
}