亲密数对(python)

题目

在自然数中有一种这样的数:它自身是一个完全平方数,加上1之后是一个素数,这一对数被称为亲密数对,请编程找出指定区域内的所有亲密数对。

解题思路

这题没什么难的,就是如果按着题目意思来一个一个遍历的话肯定炸时间,因此我们需要稍微变换以下思路,我们可以先把完全数求出来,然后再一个一个去求是否满足素数即可

提醒

注意数据的左右边界,因为在使用sqrt函数时会出先取整的情况,例如输入的数是10,那么在执行

int(m.sqrt(a))

这句代码时会输出3,而显然3是不在我们的范围内的,所以我们要在执行该句话后面要+1

代码如下

import math as m


def is_prime(n):
    if n == 2 or n == 3:
        return True
    if n % 6 != 1 and n % 6 != 5:
        return False
    for i in range(5, int(m.sqrt(n)), 6):
        if n % i == 0 or n % (i + 2) == 0:
            return False
    return True


if __name__ == '__main__':
    a, b = map(int, input().split())
    for i in range(int(m.sqrt(a)) + 1, int(m.sqrt(b)) + 1):
        if is_prime(i**2 + 1):
            print(i**2, i**2 + 1)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值