/ SeriousOJ /

Record Detail

Accepted


  
# Status Time Cost Memory Cost
#1 Accepted 1ms 284.0 KiB
#2 Accepted 9ms 320.0 KiB
#3 Accepted 410ms 460.0 KiB
#4 Accepted 389ms 468.0 KiB
#5 Accepted 387ms 472.0 KiB
#6 Accepted 127ms 284.0 KiB
#7 Accepted 405ms 468.0 KiB

Code

pub fn input() -> String {
    let mut s = String::new();
    std::io::stdin()
        .read_line(&mut s)
        .expect("Failed to read line");
    s.truncate(s.trim_end().len());
    s
}

macro_rules! read {
    ( $t:ty ) => { input().parse::<$t>().expect("Failed to parse input") };
    ( $( $t:ty ),+ ) => {
        {
            let line = crate::input();
            let mut iter = line.split_whitespace();
            (
                $(
                    iter.next()
                        .expect("Not enough input values")
                        .parse::<$t>()
                        .expect("Failed to parse input"),
                )+
            )
        }
    };
}

// def very_smart(n):
//     res = -n

//     prev = None
//     for i in range(1, n + 1):
//         cur = n // i
//         if cur == prev:
//             print(n, i)
//             res -= cur
//             break
//         res += cur
//         prev = cur
//     else:
//         return res

//     for i in range(1, cur + 1):
//         lo = (n + i + 1) // (i + 1)
//         hi = n // i
//         add = (hi - lo + 1) * i
//         res += add
//     return res

fn solve(n: i64) -> i64 {
    let mut res = -n;

    let mut prev = -1;
    let mut broke = false;
    let mut lim = 0;
    for i in 1..=n {
        let cur = n / i;
        if cur == prev {
            lim = cur;
            res -= cur;
            broke = true;
            break;
        }
        res += cur;
        prev = cur;
    }

    if !broke {
        return res;
    }

    for i in 1..=lim {
        let lo = (n + i + 1) / (i + 1);
        let hi = n / i;
        let add = (hi - lo + 1) * i;
        res += add;
    }

    res
}

fn main() {
    for _ in 0..read!(u32) {
        let n = read!(i64);
        println!("{}", solve(n));
    }
}

Information

Submit By
Type
Submission
Problem
P1207 D2. GCD equal Absolute Value (Hard Version)
Contest
Educational Round 1
Language
Rust 2021 (Rust 1.75.0)
Submit At
2025-07-14 16:59:13
Judged At
2025-07-14 16:59:13
Judged By
Score
100
Total Time
410ms
Peak Memory
472.0 KiB