Gửi bài giải
Điểm:
10,00 (OI)
Giới hạn thời gian:
0.6s
Giới hạn bộ nhớ:
256M
Input:
stdin
Output:
stdout
Tác giả:
Người đăng:
Dạng bài
Ngôn ngữ cho phép
C, C++, Java, Kotlin, Pascal, PyPy, Python, Scratch
Số chính phương được định nghĩa là bình phương của một số nguyên.
Yêu cầu: Với số n cho trước, hãy tính tổng các số chính phương trong đoạn từ 1 đến n.
Input
- Dòng đầu tiên chứa q ~(q \le 10^4)~ - số truy vấn.
- q dòng tiếp mỗi dòng chứa số nguyên dương n ~(n \le 10^{18})~
Output
- Mỗi dòng chứa tổng S sau khi đã mod cho ~10^9 + 7~
Example
Input:
1
1
Output:
1
Bình luận
chúc Anh Em 8386 vạn sự như ý, triệu sự như mơ, tỷ sự bất ngờ ngập tràn may mắn chúc Anh Em MÃI ĐỈNH MÃI ĐỈNH MÃI ĐỈNH LUÔN
Solution By Shinoz
Hint 1:
Đề yêu cầu: tính số chính phương từ ~1~ -> ~n~ với ~n~ bất kì trong đoạn ~1~ -> ~10^{18}~
Ta thấy: số chính phương gấn n nhất là: ~sqrt(n)~ (chỉ lấy phần nguyên)
Đặt ~m = sqrt(n)~. Ta có công thức tính bình phương từ ~1~ -> ~m = m(m + 1)(2m + 1)~
có thể tìm kiếm trên mạng
Hint 2:
Việc tính ~maxn = 10^{18}~ hay ~= 10^{9}~ (sau khi lấy căn) sẽ làm tràn số nên ta phải sử dụng tính chất đồng dư modulo / nghịch đảo modulo
Modular arithmetic:
Có thể bị sai số khi sử dụng nên ta phải kiểm tra x * y mod 6 = 0 ?
M ~= 10^{9} + 7~
TH1: m * (m + 1) mod 6 = 0
TH2: m * (2m + 1) mod 6 = 0
TH3: (m + 1)(2m + 1) mod 6 = 0
Modular multiplicative inverse:
Ngược lại với cộng / nhân, (a / b) mod M có thể sẽ khác(a mod M) / (b mod M)
Ta có:
(a / b) mod M = (a * ~b^{-1}~) mod M = (a mod M) * (~b^{-1}~ mod M) mod M
Vì M là số nguyên tố nên theo định lý Fermat, ta có: ~b^{-1}~ mod M = ~b^{(M - 2)}~
Chỉ hoạt động khi M là số nguyên tố
Có thể tính trước ~6^{M - 2}~ rồi lắp vào công thức tính (sử dụng AI / search google / sử dụng chia để trị)
Document
Modular arithmetic
Modular multiplicative inverse
Another solution
Chất quá Shinoz ơi!
Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.
ngầu quá ngầu quá nma sol thiếu sót vl
Sử dụng module và dùng công thức Tổng bình phương các số từ 1 Đến Căn bậc Hai của N
Lưu ý : Với bài này ta có thể dùng kiểu dữ liệu __int128 để giải quyết bằng cách ép kiểu
** Với sự đam mê các công thức này để có thể tìm ở trên mạng
Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.
nghịch đảo modulo (tuy không cần thiết vì vẫn dùng tính chất đồng dư được)