Trong bài toán này, chúng ta được cho một số N. Nhiệm vụ của chúng ta là tìm số tốt lớn nhất trong các ước của số N đã cho. .
Một con số tốt là một số trong đó mọi chữ số đều lớn hơn tổng các chữ số ở bên phải của nó (tất cả các bit nhỏ hơn nó). Ví dụ:732 là một số đẹp, 7> 3 + 2 và 3> 2.
Hãy lấy một ví dụ để hiểu vấn đề,
Input : N = 15 Output : 15
Giải thích -
Divisors of 15 : 1, 3, 5, 15.
Phương pháp tiếp cận giải pháp
Một giải pháp đơn giản cho vấn đề là tìm tất cả các ước của N. Và họ tìm số tốt lớn nhất được lấy ra dưới dạng tích của tất cả các ước nguyên tố của số đó.
Ví dụ
Chương trình minh họa hoạt động của giải pháp của chúng tôi
#include <bits/stdc++.h> using namespace std; int findLargestGoodNumber(int n){ vector<int> primeFactors; int x = n; for (int i = 2; i * i <= n; i++) { if (x % i == 0) { primeFactors.push_back(i); while (x % i == 0) x /= i; } } if (x > 1) primeFactors.push_back(x); int goodNumber = 1; for (int i = 0; i < primeFactors.size(); i++) goodNumber = goodNumber * primeFactors[i]; return goodNumber; } int main(){ int n = 28; cout<<"The largest good Number in divisor of "<<n<<" is "<<findLargestGoodNumber(n); return 0; }
Ví dụ
The largest good Number in divisor of 28 is 14