ブルーブリッジカップ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);
}