Hướng dẫn giải của HSG12 Long An 2023 - Vòng 1 - Bài 1

Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người làm lời giải.


Nộp code mẫu trước khi tự giải được bài tập là một hành vi có thể bị ban.

Tác giả: lds, haruxne

Để dành trọn điểm bài này ta cần phải tối ưu thuật toán lấy tỉ ước từ ~\mathcal{O}(n)~ xuống còn ~ \mathcal{O}(\sqrt{n}).~

Với mỗi ~n~ không phải là số chính phương ta chỉ cần chạy ~i~ đến ~\sqrt n~ và nếu x%i == 0 thì sum += i + x/i. Với ~n~ là số chính phương ta phải đặt trường hợp riêng để không bị thừa ước.

Code tham khảo
double getsum(long long x)
{
    long long sum=0;
    for(int i=1;i*i<=x;i++)
        if(x%i==0)
        {
            if(i*i==x)
                sum+=i;
            else
                sum+=i+x/i;
        }
    return (double)sum/x;
}

Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.