蓝桥杯Python初级测试题之省赛题7

1. 寻找质数
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
我们知道第一个质数是 2、第二个质数是 3、第三个质数是 5……
请你计算第 2019 个质数是多少?
解题思路:
(1) 设置一个自增1的正整数变量n
(2) 设置一个子函数判断是否为质数,如果不是1和自己,所有数都不能整除的为质数
(3) 对n进行判断,当找到2019个质数时,输出结果

# 定义变量n为自增自然数,n_zs为质数的序号
n=1
n_zs=0
# 判断输入的数字是不是质数,如果不是1和自己,所有数都不能整除
def is_zs(s):
  for i in range(s):
    if (i+1) !=1 and (i+1)!=s:
      if s % (i+1)== 0:
        return False
        break
  return True
# 判断自增的数字是否为质数,是则序号增加1直到2019
while True:
  n+=1
  if is_zs(n) == True:
    n_zs+=1
    if n_zs== 2019:
      print(n)
      break

2. 分数之和

题目描述

蓝桥杯省赛 python题型 蓝桥杯python初级赛题_经验分享


解题思路:

(1) 从0-19进行自增循环获取每一个分数,分数的分母就是2的i次方

(2) 为了获取全部分数和,需要2步求和进行累积,分析规律发现分子为上一个分子和*2+1,分母则为当前分母

(3)求出分数和以后,设置一个最大公约数函数,对分子分母求最大公约数

(4)将分数和的分子分母除以最大公约数,简化得到互质的分数和的分数

import math

# 设计一个子函数求最大公约数
def max_gys(a, b):
    # 获取输入两个数中的最小值,如果最小值为1,则直接返回1
    if a <= b:
        min_n = a
    else:
        min_n = b
    if min_n == 1:
        return 1
     # 从两个数中比较小的值开始-1循环,直到找到最大公约数,返回该值
    for k in range(min_n, 1, -1):
        # print(k)
        if a % (k + 1) == 0 and b % (k + 1) == 0:
            return k + 1
    # 最终找不到还是返回1
    return 1

# 从1到20开始循环
for i in range(20):
    fz = 1
    #分母为2的i次方
    fm = int(math.pow(2, i))
    # 每次两个相邻的分数之和都有规律,比如1/1+1/2之后的分母等于后一个分母,分子等于分子累加的和*2+1
    if i == 0:
        h_fz = 1
        h_fm = 1
    else:
        h_fz = h_fz * 2 + 1
        h_fm = fm
m_gys = max_gys(h_fz, h_fm)
# 如果有最大公约数,则分子分母同除以最大公约数,以满足互质条件
if m_gys != 1:
    h_fz = int(h_fz / m_gys)
    h_fm = int(h_fm / m_gys)
#输出分数
print("%d/%d" % (h_fz, h_fm))