📌  相关文章
📜  国际空间研究组织 | ISRO CS 2007 |问题 48(1)

📅  最后修改于: 2023-12-03 15:07:33.269000             🧑  作者: Mango

国际空间研究组织 | ISRO CS 2007 |问题 48

这道问题来自于2007年印度国际空间研究组织的招聘考试。以下是这道问题的完整描述:

给定一个正整数n,编写一个程序来查找1到n之间的所有素数并输出它们的二进制表示。

输入格式:

  • 一个整数n(1<=n<=100000)

输出格式:

  • 所有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'

以上代码已经被成功运行并输出了正确的结果。