Nguồn: Tự nghĩ.
Rating : 1700.
**Đề Bài**:
Cubill nay được thầy 5Trứng dạy về hàm nhân tính. Do không chú ý nghe giảng nên cậu chỉ biết hàm $f(x)$ được gọi là hàm nhân tính nếu $f(x)*f(y)=f(x*y)$ với $gcd(x, y)=1$.
Về nhà cậu mở vở bài tập ra và chả hiểu gì nên cậu nhờ các bạn làm hộ cậu, bài tập về nhà của cậu như sau:
Cho một số nguyên dương $n$ hãy đếm số cặp $(x, y)$ mà:
* $x \le y$
* $1 \le x, y \le n$
* $gcd(x, n)*gcd(y, n)=gcd(x*y, n)$
Với hàm $gcd(x, y)$ là ước chung lớn nhất của $x, y$.
**Input**:
* Dòng đầu chứa số nguyên dương $T$ ($1\le T \le 10^6$) thể hiện số lượng test.
* $T$ dòng tiếp theo mỗi dòng chứa một số nguyên dương $n$ ($1\le n \le 10^5$)
**Output**:
* $T$ dòng mỗi dòng in ra một số nguyên dương duy nhất là kết quả của test tương ứng.
**Scoring:**
| Subtask | Điểm | Giới Hạn |
| -------- | -------- | -------- |
| 1 | 30 | $1\le T \le 50, 1\le n \le 500$
| 2 | 70 | Không có ràng buộc gì thêm |
**Lời Giải:**
Subtask 1:
Đề bài bảo làm gì ta làm theo.
ĐPT: ($T.n^2.logn$).
Subtask 2:
Ta có: $f(n)$ là số lượng số $x$ mà $x\le n, gcd(x, n)=d$.
Dễ thấy $f(n)=phi(n/d)$ nếu d là ước của n.
Gọi $a(i, j)$ là số cặp $(x, y)$ mà:
* $x \neq y$.
* $i*j$ là ước của $n$.
* $gcd(x, n)=i$.
* $gcd(y, n)=j$.
* $1 \le x, y \le n$
Ta có thể chứng minh rằng $a(i, j)=phi(n/i)*phi(n/j)$.
Gọi $b(i)$ là số cặp $(x, y)$ mà:
* $i^2$ là ước của $n$.
* $gcd(x, n)=i$.
* $gcd(y, n)=i$.
* $1 \le x, y \le n$
Ta có thể chứng minh rằng $b(i)=phi(n/i)*(phi(n/i)+1)/2$.
Vậy nên đáp án của bài này là:
$(\sum_{x, y \in d(n)} a(x, y))/2+\sum_{x \in d(n)} b(x)$.
Chú ý để có độ phức tạp này các bạn phải sàng ước và phi trước.
Đpt $(n.logn + \sum_{i=1}^{10^5} d(i)^2)$
**Code:** https://ideone.com/5Fhnr2