top1编程
← 返回题目
题解

【基础】N个数的最大公约数

3 条题解

  • 0
    @ 2026-7-29 20:22:54
    /*
    【解题思路:找出一群人的“共同大靠山”】
    小朋友们,想象一下有 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
      @ 2026-7-29 0:06:24
      #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
        @ 2026-7-28 22:09:58
        #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