Giả sử chúng ta chỉ có một ký tự 'A' trong trình soạn thảo văn bản. Chúng ta có thể thực hiện hai thao tác trên chữ cái này cho mỗi bước -
- Sao chép tất cả - Chúng tôi có thể sao chép tất cả các ký tự có trên sổ ghi chú
- Dán - Chúng tôi có thể dán các ký tự được sao chép lần trước.
Bây giờ giả sử chúng ta có một số n. Chúng ta phải lấy chính xác n 'A' trên notepad bằng cách thực hiện số bước tối thiểu được phép. Chúng ta phải tìm kết quả trong số bước tối thiểu để có được n 'A'. Vì vậy, nếu n cho trước là 3, thì câu trả lời sẽ là 3, vì vậy ban đầu chỉ có một "A", Bây giờ sao chép cái này và dán cái này, vì vậy sẽ có "AA" bây giờ. Bây giờ chúng ta có thể dán lại, vì vậy một chữ "A" sẽ được đặt. Vì vậy, chúng tôi sẽ nhận được "AAA".
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- ret:=0
- cho k trong phạm vi 2 đến n
- while n mod k không phải là 0
- ret:=ret + k và n:=n / k
- while n mod k không phải là 0
- trả lời lại
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
#include <bits/stdc++.h> using namespace std; class Solution { public: int minSteps(int n) { int ret = 0; for(int k = 2; k <= n; k++){ for(; n % k == 0; ret += k, n /= k); } return ret; } }; main(){ Solution ob; cout << (ob.minSteps(10)); }
Đầu vào
10
Đầu ra
7