# Number Theory# GCD# Binary Conversion

d306 - 10193 - All You Need Is Love

🔗 前往 ZeroJudge 原題

題目描述

題目要求判斷兩個二進位字串轉換成的十進位數是否互質。如果它們的最大公因數為 1,則輸出 "Love is not all you need!",否則輸出 "All you need is love!"。

解題思路

題目描述中的「愛的算命機」實際上是一個障眼法。關鍵在於理解題目最終的要求是判斷兩個數是否互質。因此,只需要將輸入的二進位字串轉換為十進位數,然後計算它們的最大公因數 (GCD)。如果 GCD 為 1,則表示它們互質,否則不互質。程式碼中使用了輾轉相除法來計算 GCD。

複雜度分析

  • 時間複雜度: O(log(min(x, y))),其中 x 和 y 是兩個轉換後的十進位數。這是因為 GCD 的計算使用輾轉相除法,其時間複雜度與輸入數字的位數成對數關係。
  • 空間複雜度: O(1),程式碼只使用了常數級別的額外空間。

程式碼

#include <iostream>
using namespace std;
int GCD(int a, int b){
	if (b)
        while((a %= b) && (b %= a));
	return a + b;
}
int main(){
	string a,b;
	int t,x,y;
	cin >> t;
	for(int c=1;c<=t;++c){
		cin >> a >> b;
		x=0,y=0;
		for(int i=0,al=a.length();i<al;++i){
			x*=2;
			x+=a[i]-'0';
		}
		for(int i=0,al=b.length();i<al;++i){
			y*=2;
			y+=b[i]-'0';
		}
		cout << "Pair #" << c << ": ";
		if(GCD(x,y)!=1)
			cout << "All you need is love!\n";
		else
			cout << "Love is not all you need!\n";
	}
}

Discussion