在 C++ 中查找给定数字 N 的约数中最大的好数
在这个问题中,我们给定一个数字 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
广告