【蓝桥杯】 C++ 既约分数

题目描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
如果一个分数的分子和分母的最大公约数是 1,这个分数称为既约分数。
例如 3 4 {3\over 4} 43 1 8 {1\over 8} 81 7 1 {7\over 1} 17, 都是既约分数。
请问,有多少个既约分数,分子和分母都是 1 到 2020 之间的整数(包括 1 和 2020)?

实现代码

#include<bits/stdc++.h>
using namespace std;
bool jiyue(int a,int b)
{
    for(int i=2;i<=max(a,b);i++)
    {
        if(a%i==0 && b%i==0)
        {
            // 有公约数返回 0
            return 0;
        }
    }
    // 没公约数返回 1
    return 1;
}

int main()
{
    int count=0;
    for(int mu=1;mu<=2020;mu++)
    {
        for(int zi=1;zi<=2020;zi++)
        {
            if(jiyue(zi,mu))
            {
                count++;
            }
        }
    }

    cout<<count<<endl;
}

解题思路

首先循环分子和分母,在循环里判断它们是否为既约分数,如果是就给 count 加 1,不是的话继续循环。判断既约分数的函数很好写,输入两个数,判断两个数是否有共同的约数,如果有就返回 0,循环结束都没有返回 0,就返回 1,表明这两个数是既约分数。

注意点

  • 注意判断既约分数的函数,for 循环的范围要算上 max(a,b),因为有时候分子分母一样,就会多算。
bool jiyue(int a,int b)
{
    for(int i=2;i<=max(a,b);i++)
    {
        if(a%i==0 && b%i==0)
        {
            // 有公约数返回 0
            return 0;
        }
    }
    // 没公约数返回 1
    return 1;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值