• [HJ60 查找组成一个偶数最接近的两个素数]


    描述

    任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个素数差值最小的素数对。

    数据范围:输入的数据满足 4≤n≤1000 

    输入描述:

    输入一个大于2的偶数

    输出描述:

    从小到大输出两个素数

    示例1

    输入:

    20

    复制输出:

    7
    13

    复制

    示例2

    输入:

    4
    

    复制输出:

    2
    2

    思路一:硬编码,双指针

    import math

    while True:

        try:

            n = int(input())

            l = [

                p

                for p in range(2, n)

                if 0 not in [p % d for d in range(2, int(math.sqrt(p)) + 1)]

            ]

            # ll = []

            # for i in range(2,n):

            #     lll = []

            #     for j in range(2,int(sqrt(i))+1):

            #         lll.append(i%j)

            #     if 0 not in lll:

            #         ll.append(i)

            start_index = 0

            end_index = -1

            ret = []

            for i in range(len(l)):

                if l[start_index] * 2 == n:

                    ret.append((l[start_index], l[start_index]))

                    break

                elif l[end_index] * 2 == n:

                    ret.append((l[end_index], l[end_index]))

                    break

                elif l[start_index] >= l[end_index]:

                    break

                elif l[start_index] + l[end_index] > n:

                    end_index += -1

                elif l[start_index] + l[end_index] < n:

                    start_index += 1

                elif l[start_index] + l[end_index] == n:

                    ret.append((l[start_index], l[end_index]))

                    end_index += -1

                    start_index += 1

            for i in ret[-1]:

                print(i)

        except:

            break

    思路二,利用i + n - i =n为条件遍历

    def isSuShu(x):

        if x <= 2:

            return True

        else:

            for i in range(2, int(x ** 0.5) + 1):

              if x % i == 0:

                  return False

            else:

              return True

    while True:

        try:

            n = int(input())

            for i in range(int(n / 2), n):

                if isSuShu(i) and isSuShu(n - i):

                    print(n - i)

                    print(i)

                    break

        except:

            break

  • 相关阅读:
    解决网络协议服务器问题的关键:定位能力与抓包技术
    .NET静态代码织入——肉夹馍(Rougamo) 发布1.4.0
    顶级旗舰新机皇Mate 60 RS发布,保时捷设计再次回归
    JavaScript中的设计原则
    2019年互联网高频Java面试题指南!互联网升职加薪方案!
    Spring配置那些事
    在手机浏览器中打开指定的应用商店
    Baumer工业相机堡盟工业相机如何通过BGAPI SDK设置相机的图像剪切(ROI)功能(C++)
    阿里技术大牛亲自编写,将高难度的 Java 高并发知识讲解得浅显易懂
    Disruptor-简单使用
  • 原文地址:https://blog.csdn.net/zhujunqtp/article/details/127086463