我如何检查数字是否为半素数

Mar*_*deX 1 python if-statement range

def is_prime(num):

    if num > 1:

        for i in range(2,num):
Run Code Online (Sandbox Code Playgroud)

如果 (num % i) == 0,则返回 False:

            if (num % i) == 0:
                return False
Run Code Online (Sandbox Code Playgroud)

如果素数返回真

        else:
            return True
Run Code Online (Sandbox Code Playgroud)

如果不是素数则返回 False

    else:
        return False

def is_semiprime():
        n = int(input("Enter a number to find out if its semiprime or not\n>>> "))
        for d1 in range(2, int(n**.5)):
            if n % d1 == 0:
                d2 = int(n / d1)
Run Code Online (Sandbox Code Playgroud)

is_prime(d1) 和 is_prime(d2) 经历了,不要告诉我真假他们只是发送空行。

               return is_prime(d1) and is_prime(d2)
            return False

is_semiprime()
Run Code Online (Sandbox Code Playgroud)

当它返回 is_prime(d1) 和 is_prime(d2) 如果它们都是 True 则返回 True

Bar*_*mar 5

半质数是两个质数的乘积。所以算法很简单:

  1. 找出该数的一个除数,称其为d1
  2. 将数字除以d1得到第二个除数,d2
  3. 测试d1和是否d2都是素数。如果是,那么原始数是半素数。

代码:

def is_semiprime(n):
    for d1 in range(2, int(n**.5)+1):
        if n % d1 == 0:
            d2 = n / d1
            return is_prime(d1) and is_prime(d2)
    return False

def is_prime(n):
  if n == 2 or n == 3: return True
  if n < 2 or n%2 == 0: return False
  if n < 9: return True
  if n%3 == 0: return False
  r = int(n**0.5)
  f = 5
  while f <= r:
    if n%f == 0: return False
    if n%(f+2) == 0: return False
    f +=6
  return True    

def ask_semiprime():
    num = int(input("What number would you like to check?"))
    if is_semiprime(num):
        print(num, " is semiprime")
    else:
        print(num, " is not semiprime")

ask_semiprime()
Run Code Online (Sandbox Code Playgroud)

is_primeisPrime Function for Python Language复制了函数