【蓝桥杯Python组】既约分数
【问题描述】
如果一个分数的分子和分母的最大公约数是 1,这个分数称为既约分数。
例如,34 , 52 , 18 , 71 都是既约分数。
请问,有多少个既约分数,分子和分母都是 1 到 2020 之间的整数(包括 1 和 2020)?
【思路】
- 两层循环遍历两遍数据
- 每次循环比较i(i=1,2,3,…,2020)与1-2020是否构成最大公约数为1的分数
【重点】
- 设计求最大公约数的函数
- 使用辗转相除法
【源代码】
# 两层循环遍历1-2020间的整数
totle_amount=0
#辗转相除法
def func(a,b):
x = a % b
while (x != 0):
a = b
b = x
x = a % b
return b
for i in range(1,2021):
for j in range(1,2021):
if func(i,j)==1:
totle_amount+=1
# print("{}:{}/{}是既约分数".format(totle_amount,i,j))
# 2481215
print(totle_amount)
【输出】
2481215