c语言求公约数个数数组
时间: 2024-10-29 21:05:29 浏览: 23
在C语言中,求两个或多个整数的最大公约数(Greatest Common Divisor, GCD)的个数通常用于处理一些与约简、分数化简或者计算公共因子相关的任务。若要统计一组整数中的公约数个数,可以采用欧几里得算法(Euclidean Algorithm),该算法也可以用来找到最大公约数。
首先,你可以编写一个函数来计算两个数的最大公约数,例如辗转相除法:
```c
// 使用欧几里得算法计算gcd
int gcd(int a, int b) {
if (b == 0)
return a;
else
return gcd(b, a % b);
}
```
接着,你需要遍历数组,对每一对相邻的元素计算GCD,然后将结果存储在一个新的数组中。为了统计公约数个数,你可以使用哈希表(如`std::unordered_set`)来记录每个GCD是否出现过。最后遍历哈希表的大小,即为公约数个数。
这是一个基本示例:
```c
#include <iostream>
#include <unordered_set>
int gcd(int a, int b);
int main() {
int numbers[] = {48, 60, 72};
int n = sizeof(numbers) / sizeof(numbers[0]);
int gcd_array[n - 1];
std::unordered_set<int> unique_gcds;
for (int i = 0; i < n - 1; ++i) {
gcd_array[i] = gcd(numbers[i], numbers[i + 1]);
unique_gcds.insert(gcd_array[i]);
}
std::cout << "公约数个数: " << unique_gcds.size() << std::endl;
return 0;
}
// 用于计算两个数的GCD
int gcd(int a, int b) {
// ... 使用上述gcd函数...
}
```
阅读全文