【问题标题】:How do i check if the number is semi prime我如何检查数字是否是半素数
【发布时间】:2018-10-06 11:37:23
【问题描述】:
def is_prime(num):

    if num > 1:

        for i in range(2,num):

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

            if (num % i) == 0:
                return False

如果素数返回 True

        else:
            return True

如果不是素数则返回 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)

is_prime(d1) 和 is_prime(d2) 会通过,不告诉我是真是假,他们只是发送空行。

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

is_semiprime()

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

【问题讨论】:

  • 你的问题是 (a) 你不知道什么是半素数,(b) 你不知道测试半素数的算法,或者 (c) 你知道,但是你'被困在实施它的某个特定步骤上?如果是 (c),请向我们展示您知道如何编写的代码,并指出差距(如count += 1 # I know I need to do count += n if i**n divides num but I don't know how to get n)。
  • 写一个函数来检查一个数是否是素数。编写另一个获取数字的两个因子的函数,并在它们两个上调用isPrime() 函数。如果两者都为真,则该数是半素数。
  • @Barmar 60 的“两个因素”是什么?还是 5 个?
  • @abarnert 如果数字不是素数,您应该能够找到一个因子。将数字除以该因子以获得另一个因子。然后检查这两个是否都是素数。
  • @Barmar (b) 我不知道测试半素数的算法。半素数也是由两个素数组成的数字,所以我如何对其进行编码以检查它

标签: python if-statement range


【解决方案1】:
def check_prime(n): #for checking wheather prime or not
    if n > 1:
        if n == 2: return True
        for i in range(2,n):
            if n % i == 0:
                return False
                break
        return True
    return False
def primeproduct(m): #for checking wheather prime product or not 
    if m >= 0:
      for i in range(1,m):
        if m%i == 0 and check_prime(i) and check_prime(m//i):
            return True
            break
    return False
  

这可能会有所帮助

【讨论】:

    【解决方案2】:

    number=int(输入())

    s=数字

    x=[]

    for i in range(2,number+1):

    if s%i==0:
    
        x.append(i)
    
        s=s//I
    
        if s==i or (i>s and s!=1):
    
            x.append(s)
    

    如果 len(x)==2:

    print(f"{number} is a semiprime number because it is the product of Tow primes: ",end="")
    

    其他:

    print(f"{number} is not a semiprime number because it is the product of {len(x)} primes: ",end="")
    

    对于 x 中的 i:

    if i==x[-1]:
    
        print(i)
    
    else:
    
        print(str(i)+"*",end="")
    

    【讨论】:

      【解决方案3】:

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

      1. 找一个数的除数,叫它d1
      2. 将数字除以d1 得到第二个除数,d2
      3. 测试d1d2 是否都是素数。如果是,则原始数是半质数。

      代码:

      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()
      

      我从isPrime Function for Python Language复制了is_prime函数

      【讨论】:

      • 是的,我有一个主要功能
      • 所以如果推算的数字是半素数,我的代码不会向我报告。
      • if is_semiprime(number): print(number, " is semiprime")
      • 我上面的代码已经改变了,虽然这不起作用。好吧 idk 把它放在我的代码中大声笑
      • 您需要学会将执行输入和输出的函数与计算结果的函数分开。
      猜你喜欢
      • 2013-08-02
      • 2016-11-27
      • 2015-09-15
      • 2013-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多