이 문제에서 우리는 숫자 N이 주어집니다. 우리의 임무는 주어진 숫자 N의 제수에서 가장 큰 좋은 숫자를 찾는 것입니다. .
좋은 숫자 모든 숫자가 오른쪽 숫자의 합보다 큰 숫자입니다(모든 숫자보다 덜 중요한 비트). 예를 들어 732는 7> 3+2 및 3>2입니다.
문제를 이해하기 위해 예를 들어 보겠습니다.
Input : N = 15 Output : 15
설명 -
Divisors of 15 : 1, 3, 5, 15.
해결 방법
문제에 대한 간단한 해결책은 N의 모든 제수를 찾는 것입니다. 그리고 그들은 그 숫자의 모든 소수의 곱으로 추출되는 가장 큰 좋은 숫자를 찾습니다.
예
솔루션 작동을 설명하는 프로그램
#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; }
예
The largest good Number in divisor of 28 is 14