如何在Python中检查莫兰数

109 阅读2分钟

数字是有魔力的。人们根据自己的特长为不同的数字命名。在这篇文章中,我们将讨论什么是莫兰数。我们还将在Python中实现一个程序来检查一个数字是否是莫兰数字。

什么是莫兰号码?

莫兰数是一个数字,当它被其数字之和除以时,其结果是一个素数。换句话说,如果我们取一个莫兰数字,计算它的数字之和,然后用数字之和除以该数字,结果将是一个素数。莫兰数是哈沙数的一个子集。

例如,42是一个莫兰数。如果你计算它的数字之和,它是6。42除以6,结果是7,这是一个素数。因此,42是一个莫兰数字。

另一方面,如果我们以20为例,它的位数之和是2。因此,20不是莫兰数。

在Python中检查莫兰数

要在Python中检查一个莫兰数,我们必须进行以下操作。

  1. 计算给定数字的位数之和。
  2. 用数字的总和除以该数字。
  3. 检查除法的结果是否是一个素数。

让我们先讨论如何找到数字的位数之和。

为了找到给定数字的位数之和,我们将用该数字除以10,直到该数字变成0。我们将利用余数来计算数字之和,方法是在每次除法时将余数相加,如下所示。

def calculate_sum_of_digits(N):
    sumOfDigits = 0
    while N > 0:
        digit = N % 10
        sumOfDigits = sumOfDigits + digit
        N = N // 10
    return sumOfDigits

找出数字之和后,你可以用给定的数字除以数字之和来找出结果。现在,我们必须检查这个数字是否是一个质数。为此,我们将用结果除以从2到结果的平方根的所有数字。如果结果能被这个范围内的任何一个数字整除,这个数字就不是素数。下面给出的isPrime()函数执行了这个操作。它接受一个数字作为输入参数,如果给定的数字是一个质数,则返回True。否则,它返回 "假"。

def isPrime(N):
    count = 2
    while count ** 2 <= N:
        if N % count == 0:
            return False
        count = count + 1
    return True

在Python中检查莫兰数的程序

在定义了计算数字之和和检查素数的函数后,我们可以用Python写一个检查莫兰数的程序,如下所示。

def calculate_sum_of_digits(N):
    sumOfDigits = 0
    while N > 0:
        digit = N % 10
        sumOfDigits = sumOfDigits + digit
        N = N // 10
    return sumOfDigits


def isPrime(N):
    count = 2
    while count ** 2 <= N:
        if N % count == 0:
            return False
        count = count + 1
    return True


def check_for_moran_number(N):
    sumOfDigits = calculate_sum_of_digits(N)
    if N % sumOfDigits == 0:
        result = N // sumOfDigits
        return isPrime(result)
    else:
        return False


input_number = 42
output = check_for_moran_number(input_number)
print("{} is a Moran Number:{}".format(input_number, output))
input_number = 20
output = check_for_moran_number(input_number)
print("{} is a Moran Number:{}".format(input_number, output))

输出。

42 is a Moran Number:True
20 is a Moran Number:False

结论

在这篇文章中,我们已经讨论了什么是莫兰数。我们还讨论了检查莫兰数的步骤,并在Python中实现了它。