在 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
广告