题解
【基础】N个数的最大公约数
3 条题解
-
0
/* 【解题思路:找出一群人的“共同大靠山”】 小朋友们,想象一下有 N 个小朋友聚在一起,每个人手里都有一大堆乐高积木。 我们要找的“最大公约数”,其实就是找一个最大的数字,它能把所有小朋友手里的积木都整齐地分完,一个都不剩。 我们可以用“滚雪球”的方法来解决: 1. **第一个人出场**:先看第一个人的积木数量。 2. **两两商量**:第二个人过来,跟第一个人商量出一个他们俩都能被整除的最大数。 3. **接力比赛**:第三个人过来,再跟刚才那个商量好的“结果”继续商量。 4. **最后的结果**:就像接力赛一样,一个人接一个人地比下去,最后剩下的那个数,就是所有人都认同的“共同大靠山”! 在代码里,我们用了一个叫 `__gcd` 的小魔法,它能飞快地帮两个数字算出它们的最大公约数。 */ #include<bits/stdc++.h> using namespace std; int a[100005]; int main(){ int n; // 先问问一共有多少个小朋友(数字) cin >> n; // gys 用来存我们一路上算出来的“共同靠山” // 把它初始设为 0,是因为在数学魔法里,0 和任何数 x 的最大公约数都是 x int gys = 0; for(int i = 1; i <= n; i++){ // 把每一个数字都读进来 cin >> a[i]; // 让当前的“共同靠山”和新来的数字 a[i] 再去算一次公约数 // 算出结果后,更新我们的“共同靠山” gys,准备迎接下一个数字 gys = __gcd(gys, a[i]); } // 最后输出这个被所有人认可的、最大的“共同靠山” cout << gys; return 0; } -
0
#include <iostream> using namespace std; int gcd(int a, int b) { while (b != 0) { int t = b; b = a % b; a = t; } return a; } int a[10005]; int main() { int n; cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; } int r = a[1]; for (int i = 2; i <= n; i++) { r = gcd(r, a[i]); } cout << r; return 0; } -
0
#include<bits/stdc++.h> using namespace std; int a[1000]; //求公约数的函数 int gcd(int n,int m){ if(n%m==0){ return m; } return gcd(m,n%m); } int main(){ int n; cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; } for(int i=2;i<=n;i++){ a[i]=gcd(max(a[i-1],a[i]),min(a[i-1],a[i])); } cout<<a[n]; return 0; }
- 1