ブルーブリッジカップC/C ++ Bグループの毎日の練習〜同じスコア

ブルーブリッジカップC/C ++ Bグループの毎日の練習〜同じスコア

みなさん、こんにちは。私はフェイ・ニャオです。この記事がお役に立てば、気に入って、集めて、編集者をサポートしてください。ありがとうございます。

トピックの説明

この質問は空欄を埋める質問です。結果を計算した後、コードのoutputステートメントを使用して、埋められた結果を出力します。

分数の分子と分母の最大公約数が11の場合、その分数は既約分数と呼ばれます。

たとえば、3 / 4、1 / 8、および7/1はすべて削減された分数です。

すみません、分子と分母の両方が1から2020(1と2020を含む)の整数である分数はいくつありますか?

答え:2481215


#include<iostream>

using namespace std;

int gcd(int a,int b){
    
    
	//辗转相除法求最大公约数
	return b == 0 ? a:gcd(b,a%b); 
}
int main(){
    
    
	int ans = 0;
	for(int zi = 1;zi <= 2020;zi++){
    
    
		for(int mu = 1;mu <= 2020;mu++){
    
    
			if(gcd(zi,mu) == 1){
    
    
				ans++;
			}
		}
	}
	cout << "ans = " << ans << endl;
	return 0;
} 

コードのアイデア:

既約分数の宣言ansは0に初期化され、分子と分母はforループであり、gcd(zi、mu)は最大公約数の1を見つけ、既約分数に1を加えたものです。

int main(){
    
    
	int ans = 0;
	for(int zi = 1;zi <= 2020;zi++){
    
    
		for(int mu = 1;mu <= 2020;mu++){
    
    
			if(gcd(zi,mu) == 1){
    
    
				ans++;
			}
		}
	}
	cout << "ans = " << ans << endl;
	return 0;
} 

bが0の場合、投げて回す方法はaを返し、そうでない場合はgcdを返します。これは、aの余りに相当する0に等しく、bは0に等しく、aは前のb値を返します。数式として覚えることができます。

int gcd(int a,int b){
    
    
	//辗转相除法求最大公约数
	return b == 0 ? a:gcd(b,a%b); 
}

おすすめ

転載: blog.csdn.net/A6_107/article/details/123005398