C ++中给定乘积的N个整数的最大GCD
假设我们有两个整数N和P。P是N个未知整数的乘积。我们必须找到这些整数的最大可能GCD。假设N=3,且P=24,则不同的组将像{1,1,24},{1,2,12},{1,3,8},{1,4,6},{2,2,6},{2,3,4}。GCD为:1、1、1、1、2、1。因此,答案是2。
我们将找到P的所有素因子,并将它们存储到哈希映射中。当素数因子在所有整数中都相同时,N个整数将具有最大GCD。因此,如果P=p1k1*p2k2*…*pnkn。pi是主要因素。然后最大GCD将RES=P1K1/N*P2K2/N*...*pÑKN/N。
示例
#include <iostream>
#include <cmath>
#include <unordered_map>
using namespace std;
long getMaxGCD(long N, long p) {
int gcd = 1;
unordered_map<int, int> prime_factors;
for (int i = 2; i * i <= p; i++) {
while (p % i == 0) {
prime_factors[i]++;
p /= i;
}
}
if (p != 1)
prime_factors[p]++;
for (auto v : prime_factors)
gcd = gcd * pow(v.first, v.second / N);
return gcd;
}
int main() {
long n = 3;
long p = 24;
cout << "MAX GCD: " << getMaxGCD(n, p);
}输出结果
MAX GCD: 2
热门推荐
10 读书祝福语女生短句简短
11 感谢同事新婚祝福语简短
12 感谢教官文案祝福语简短
13 员工聚会蛋糕祝福语简短
14 元宵发客户祝福语简短
15 给团队信心祝福语简短
16 医美的祝福语大全简短
17 异国姻缘的祝福语简短
18 兄妹拍照祝福语简短的话