在 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

更新于: 2022年1月28日

201 次查看

开启你的 职业生涯

通过完成课程获得认证

立即开始
广告