我是靠谱客的博主 无奈钢笔,最近开发中收集的这篇文章主要介绍既约分数 -- 辗转相除法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

如果一个分数的分子和分母的最大公约数是 11,这个分数称为既约分数。

例如 frac{3}{4} ,frac{1}{8} ,frac{7}{1}, 都是既约分数。

请问,有多少个既约分数,分子和分母都是 1 到 2020 之间的整数(包括 1 和 2020)?

运行限制

  • 最大运行时间:2s
  • 最大运行内存: 128M

题目来源:既约分数


1、题目分析

辗转相除法:求解两个整数的最大公约数

假如需要求 1997 和 615 两个正整数的最大公约数,用欧几里得算法,是这样进行的:

1997 ÷ 615 = 3 (余 152)

615 ÷ 152 = 4(余7)

152 ÷ 7 = 21(余5)

7 ÷ 5 = 1 (余2)

5 ÷ 2 = 2 (余1)

2 ÷ 1 = 2 (余0)

至此,最大公约数为1

以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数,所以就得出了 1997 和 615 的最大公约数 1。

//
b
a%b
int gcd(int a,int b){
return b == 0?b:gcd(b,a%b);
}

2、代码实现

public class _既约分数 {
static int gcd(int a,int b) {
return b == 0?a:gcd(b, a%b);
}
public static void main(String[] args) {
long res = 1L;
for(int i=1;i<2021;i++) {
for(int j=1;j<i;j++) {
if(gcd(i, j)==1) {
res+=2;
}
}
}
System.out.println(res);
}
}

最后

以上就是无奈钢笔为你收集整理的既约分数 -- 辗转相除法的全部内容,希望文章能够帮你解决既约分数 -- 辗转相除法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(32)

评论列表共有 0 条评论

立即
投稿
返回
顶部