1. 程式人生 > 其它 >2020年藍橋杯C/C++省賽B組第二場 B:既約分數

2020年藍橋杯C/C++省賽B組第二場 B:既約分數

技術標籤:藍橋杯c++

試題B:既約分數

【問題描述】

如果一個分數的分子和分母的最大公約數是 1,這個分數稱為既約分數。
例如,3/4 , 2/5, 1/8 , 1/7 都是既約分數。
請問,有多少個既約分數,分子和分母都是 1 到 2020 之間的整數(包括 1 和 2020)?

【答案提交】

這是一道結果填空的題,你只需要算出結果後提交即可。本題的結果為一個整數,在提交答案時只填寫這個整數,填寫多餘的內容將無法得分。

答案:2481215

#include<iostream>
using namespace std;
 int num=2020;
 
 int hcf(int i,
int j){ return (! j) ? i : hcf(j, i % j); } int main(){ int sum=0; for(int i=1;i<=num;i++){ for(int j=1;j<=num;j++){ if(hcf(i,j)==1) sum++; } } cout<<sum; return 0; }

這道題重點在判斷最大公約數上,這裡我們利用遞迴和正則表示式,實現輾轉相除法求最大公約數。

這裡有一個知識點:求最大公約數的最簡表達

int hcf(int i,int j){
 	return
(! j) ? i : hcf(j, i % j); }