# Brute Force# GCD# Number Theory

a158 - 11827 - Maximum GCD

🔗 前往 ZeroJudge 原題

題目描述

題目要求給定一組正整數,找出其中所有數字對的最大公因數 (GCD)。

解題思路

此題採用暴力法。對於每組輸入,首先讀取數字並儲存在陣列中。然後,使用兩層迴圈遍歷所有可能的數字對,計算每一對的 GCD,並更新最大 GCD 值。GCD 的計算使用遞迴的歐幾里得演算法。

複雜度分析

  • 時間複雜度: O(n^2 * log(max_val)),其中 n 是數字的數量,max_val 是陣列中最大的數字。外層迴圈和內層迴圈都是 O(n^2),而 GCD 的計算(歐幾里得演算法)的時間複雜度是 O(log(max_val))。
  • 空間複雜度: O(n),用於儲存輸入數字的陣列。

程式碼

#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int GCD(int m,int n){
	if(m%n==0)
		return n;
	return GCD(n,m%n);
}
int main(){
	int a;
	cin >> a;
	string b;
	getline(cin,b);
	while(a--){
		getline(cin,b);
		int M[101]={},i=0,max=0;
		stringstream ss;
		ss<<b;
		while(1){
			ss>>M[i];
			i++;
			if(ss.fail()) break;
		}
		for(int i=0;M[i]!=0;i++){
			for(int j=i+1;M[j]!=0;j++){
				if(M[i]>M[j]){
					if(GCD(M[i],M[j])>max)
						max=GCD(M[i],M[j]);
				}
				else{
					if(GCD(M[j],M[i])>max)
						max=GCD(M[j],M[i]);
				}
			}
		}
		cout << max << endl; 
	}
}

Discussion