Điểm:
1500 (p)
Thời gian:
1.0s
Bộ nhớ:
512M
Input:
bàn phím
Output:
màn hình
Cho \(n\) số nguyên. Với mỗi số, hãy cho biết số lượng ước của nó.
Ví dụ, nếu \(x = 18\), câu trả lời đúng là \(6\) vì các ước của nó là \(1,2,3,6,9,18.\)
Input
- Dòng đầu tiên chứa một số nguyên \(n\)
- Sau đó là \(n\) dòng, mỗi dòng chứa một số nguyên \(x\)
Output
- Đối với mỗi số nguyên, in ra số lượng ước của nó.
Constraints
- \(1 \leq n \leq 10^5\)
- \(1 \leq x \leq 10^6\)
Example
Sample input
3
16
17
18
Sample output
5
2
6
Bình luận
dế mà 1500 chẳng khác j cho
import sys
import math
MAX = 10**6
divisors = [0] * (MAX + 1)
for i in range(1, MAX + 1):
for j in range(i, MAX + 1, i):
divisors[j] += 1
input = sys.stdin.read
data = input().split()
n = int(data[0])
results = []
for i in range(1, n + 1):
x = int(data[i])
results.append(str(divisors[x]))
sys.stdout.write("\n".join(results) + "\n")
Giải thích:
Giải thích đoạn mã:
Khởi tạo mảng divisors:
divisors[j] lưu trữ số lượng ước của số j.
divisors có kích thước từ 0 đến 10^6.
Tính toán số lượng ước:
Vòng lặp đầu tiên: Với mỗi số i từ 1 đến MAX, bạn sẽ đi qua các bội số của i và tăng giá trị của divisors[j] (nơi j là các bội số của i).
Đọc dữ liệu đầu vào:
input = sys.stdin.read sẽ đọc tất cả các dòng đầu vào cùng một lúc, sau đó chia nhỏ thành danh sách các chuỗi qua split().
Xử lý các yêu cầu:
Duyệt qua từng số trong danh sách và tìm số lượng ước của nó từ mảng divisors, sau đó lưu trữ vào results.
In kết quả:
Kết quả được nối lại thành một chuỗi lớn và in ra một lần duy nhất, giúp tiết kiệm thời gian in
ezz gg 1500
công thức có trg sách hết
include <bits/stdc++.h>
define ll long long
using namespace std;
ll demuoc(ll n){
ll h = sqrt(n),dem = 0;
for (ll i = 1;i <= h;i++){
if (n % i == 0){
dem+=2;
}
}
if (h*h == n){
dem--;
}
return dem;
}
ll n,a[100005];
int main(){
cin >> n;
for (ll i = 1;i <= n;i++){
cin >> a[i];
}
for (ll i = 1;i <= n;i++){
cout << demuoc(a[i]) << "\n";
}
return 0;
}
bài này chắc nhiều solution nhất LQDOJ rồi=)))
Đếm ước như bt duyệt từ 1-> sqrt(n) cs AC:))
https://ideone.com/v7U6Ok
Hint
include <iostream>
include <vector>
include <cmath>
using namespace std;
int countDivisors(int x) {
if (x <= 0) return 0;
int result = 1;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int n;
cin >> n;
}
Hint
Cách không tối ưu là duyệt 🙂 nhưng phân tích thừa số nguyên tố kết hợp với sàng nguyên tố thì sẽ AC bài này (dù hơi lâu)
Có thể tham khảo tại đây: https://ideone.com/eteDZu
Với \(n\) số nguyên cho trước, hãy cho biêt số lượng ước của từng số.
Input
Output
Constraints
Example
Test
Input
Output
Note
2 bình luận nữa