--- author: nguyencter tags: Trans title: Trans Solution --- $\Huge\text{Trans Solution}$ ------- :::info 🔗 Links: [Đề bài](https://drive.google.com/file/d/1EDCLctPhuW3Nnz2dGrvbtbIdIseOB5Yv/view?usp=sharing) 📌 Tags: `dp` ✍️ Writer: nguyencter 📋 Content: [TOC] ::: ----- ## Giới Thiệu Đề Bài ![](https://i.imgur.com/KIjamDJ.png) ----- ## Thuật toán Ta có nhận xét : số phép biến đổi $a$ thành $b$ $=$ (số phép biến đổi từ $gcd(a,b)$ thành $a$)$+$(số phép biến đổi từ $gcd(a,b)$ thành $b$). Gán $a'=a/gcd(a,b)$ và $b'=b/gcd(a,b)$ Ta thấy số phép biến đổi $a$ thành $b$ bằng số phép biến đổi $a'$ thành $b'$ nên ta chỉ cần tìm số phép biến đổi $a'$ thành $b'$ là được. Để tính số phép biến đổi từ $1$ đến $a'$ ta sử dụng phương pháp quy hoạch động. Gọi mảng $f$ gồm $k$ phần tử là mảng chứa các ước số của $a'$ được sắp xếp tăng dần. Gọi $dp[i]$ là số phép biến đổi từ $1$ thành ước số lớn thứ $i$ của $a'$ Bài toán cơ sở: $dp[1]=0$. $dp[i]=min(dp[j])+1$ với $j<i,$ $f[i]$ % $f[j]=0,f[i]/f[j] \leq d$. Gọi $dp'[i]$ là số phép biến đổi từ $1$ thành ước số lớn thứ $i$ của $b'$ Mảng $dp'$ tính toán tương tự mảng $dp$. Kết quả bài toán là $dp[k]+dp'[k'].$ Vì số lượng ước lớn nhất của $a'$ và $b'$ không quá 2000 nên độ phức tạp của thuật toán trên là khoảng $O(2000^2)$. ---- Tham khảo code ở [đây](https://github.com/nguyencter/CODE/blob/main/bwpoints.cpp)