Bài tập  /  Bài đang cần trả lời

Giải bài có thưởng!

Cho dãy số có quy luật như sau: 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, ...Cho số nguyên dương n, hãy tính tổng số đầu tiên của dãy

Cho dãy số có quy luật như sau: 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, ...

Yêu cầu: Cho số nguyên dương n, hãy tính tổng n số đầu tiên của dãy.


Input
  • Gồm một dòng chứa một số nguyên dương n.

Output
  • In ra một số nguyên là tổng n số đầu tiên của dãy chia dư cho 10^9 + 7.
0 Xem trả lời
Hỏi chi tiết
131
Tham khảo câu trả lời từ Trợ lý ảo Lazi
Dãy số đã cho có quy luật rõ ràng, và chúng ta có thể phân tích cách tính tổng các số đầu tiên trong dãy như sau:

1. **Phân tích dãy số**:
- Số 1 xuất hiện 1 lần.
- Số 2 xuất hiện 2 lần.
- Số 3 xuất hiện 3 lần.
- Số 4 xuất hiện 4 lần.
- Số k xuất hiện k lần.

Như vậy, số k sẽ nằm ở các vị trí từ \((k*(k-1)/2 + 1)\) tới \((k*(k+1)/2)\) trong dãy số.

2. **Tính số lượng các số trong dãy**:
- Để tìm tổng của n số đầu tiên, chúng ta cần xác định số k lớn nhất sao cho tổng số lượng các số từ 1 đến k không vượt quá n. Tổng số lượng là: \(\frac{k*(k+1)}{2}\).

3. **Tính tổng**:
- Tổng số đầu tiên của dãy cho đến k là:
\[
1 \cdot 1 + 2 \cdot 2 + 3 \cdot 3 + ... + k \cdot k.
\]

4. **Sử dụng Python để giải quyết**:

```python
def sum_first_n(n):
MOD = 10**9 + 7
k = 0
total_numbers = 0

# Tìm k sao cho tổng số lượng không vượt quá n
while total_numbers < n:
k += 1
total_numbers += k

# Nếu tổng số lượng lớn hơn n thì lùi lại 1
if total_numbers > n:
k -= 1

# Tính tổng của dãy số từ 1 đến k
total_sum = (k * (k + 1) * (2 * k + 1) // 6) % MOD

# Phần còn lại:
remaining_numbers = n - (k * (k + 1)) // 2

# Cộng thêm số k * remaining_numbers
total_sum = (total_sum + k * remaining_numbers) % MOD

return total_sum

# Input
n = int(input().strip())
output = sum_first_n(n)
print(output)
```

### Giải thích mã:
- Ta sử dụng một vòng lặp để tìm k sao cho tổng số lượng các số cho đến k không vượt quá n.
- Sau đó, ta tính tổng các số từ 1 đến k theo công thức tổng bình phương.
- Cuối cùng, ta tính toán số còn lại và cập nhật tổng với giá trị k.

### Kết quả:
Chương trình sẽ in ra tổng n số đầu tiên của dãy số mô tả, đã được chia cho \(10^9 + 7\).

Bạn hỏi - Lazi trả lời

Bạn muốn biết điều gì?

GỬI CÂU HỎI
Học tập không giới hạn cùng học sinh cả nước và AI, sôi động, tích cực, trải nghiệm

Hôm nay bạn thế nào? Hãy nhấp vào một lựa chọn, nếu may mắn bạn sẽ được tặng 50.000 xu từ Lazi

Vui Buồn Bình thường
×
Trợ lý ảo Trợ lý ảo
Gửi câu hỏi
×