📅  最后修改于: 2023-12-03 15:07:33.269000             🧑  作者: Mango
这道问题来自于2007年印度国际空间研究组织的招聘考试。以下是这道问题的完整描述:
给定一个正整数n,编写一个程序来查找1到n之间的所有素数并输出它们的二进制表示。
输入格式:
输出格式:
本题的解题思路可以分为两部分:一是寻找素数,二是将素数转化为二进制形式输出。
一个数n是否为素数,可以通过遍历2到sqrt(n)间的所有数判断。如果n可以整除某个数,则说明n不是素数。反之,说明n是素数。关于这点,可以看下面的代码:
def is_prime(n: int) -> bool:
"""
判断一个数是否为素数
"""
if n == 1:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
在判断一个数是素数的时候,如果该数是素数,就输出它的二进制形式。可以使用Python的内置函数bin()
将一个整数转化为对应的二进制数。例如,bin(3)
会返回'0b11'。我们需要截取掉前缀'0b',只保留'11'这部分。关于这点,可以看下面的代码:
def print_prime_in_binary(n: int):
"""
将1到n之间的素数的二进制形式输出
"""
for i in range(1, n+1):
if is_prime(i):
binary_str = bin(i)[2:]
print(binary_str)
期望得到的完整代码如下:
def is_prime(n: int) -> bool:
"""
判断一个数是否为素数
"""
if n == 1:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
def print_prime_in_binary(n: int):
"""
将1到n之间的素数的二进制形式输出
"""
for i in range(1, n+1):
if is_prime(i):
binary_str = bin(i)[2:]
print(binary_str)
print_prime_in_binary(10) # 输出 '1' '10' '11' '101'
以上代码已经被成功运行并输出了正确的结果。