2020年藍橋杯C/C++省賽B組第二場 B:既約分數
阿新 • • 發佈:2020-12-28
試題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);
}