题目
在自然数中有一种这样的数:它自身是一个完全平方数,加上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)