在 C++ 中根据约数查找数字


在这个问题中,我们给定一个包含 N 个整数的数组 divisors[],这些整数是数字 Num 的约数。我们的任务是从其约数中找到该数字。

约数数组不包含 1 和该数字本身。

让我们举个例子来理解这个问题,

输入

divisors[] = {3, 25, 5, 15}

输出

75

解释

The number 75 has divisors {3, 25, 5, 15}

解决方案方法

为了解决这个问题,我们需要使用数字的最小和最大约数来找到数字 Num。

Num = smallest * largest

为此,我们需要对数组 divisors[] 进行排序,然后找到数组中第一个和最后一个索引处的元素的乘积。

对于数字 Num,找到该数字的所有因子。并检查数字的约数是否与约数数组中的相同。如果是,则返回 Num。否则,返回 -1,表示无法找到该数字。

程序说明了我们解决方案的工作原理,

示例

 在线演示

#include <bits/stdc++.h>
using namespace std;
int findNumberFromDiv(int divisors[], int n){
   sort(divisors, divisors + n);
   int num = divisors[0] * divisors[n - 1];
   int numDiv[2*n];
   int count = 0;
   for (int i = 2; i * i <= num; i++){
      if (num % i == 0){
         numDiv[count] = i;
         count ++ ;
         numDiv[count] = num/i;
         count++;
      }
   }
   sort(numDiv, numDiv + count);
   if (count != n)
      return -1;
   else{
      for (int i = 0; i < count; i++) {
         if (divisors[i] != numDiv[i])
            return -1;
      }
   }
   return num;
}
int main(){
   int divisors[] = { 3, 25, 5, 15 };
   int n = sizeof(divisors) / sizeof(divisors[0]);
   cout<<"The number is "<<findNumberFromDiv(divisors,n);
   return 0;
}

输出

The number is 75

更新于: 2021年3月15日

179 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告