python判断数字是否是超级素数幂

yipeiwu_com6年前Python基础

如果一个数字能表示成 p^q,且p是一个素数,q为大于1的正整数,则此数字就是超级素数幂。
param number: 测试该数字是否是超级素数幂
return: 如果不是就返回 False,如果是就返回 p 和 q 值
例如,输入125,返回(5,3)

代码:

import math


def get_prime(number):
  '''
  寻找小于number的所有的质数,时间复杂度o(n^2)
  '''
  if number <= 1:
    print 'Wrong given number.'
    return
  prime = []
  for i in xrange(2, number+1):
    j = 2
    while j < i:
      if i % j == 0:
        break
      j += 1
    if j == i:
      prime.append(i)
  return prime

def super_prime_power(number):
  scope = int(math.ceil(math.sqrt(number))) # 开根号除掉一部分不需要的数
  prime_number = get_prime(scope)
  be_tested = []
  for i in prime_number: # 先将无法被整数的排除掉
    if number % i == 0:
      be_tested.append(i)
  for p in be_tested:
    q = 2
    while p ** q <= number:
      if p ** q == number:
        return (p, q)
      q += 1
  return False

print super_prime_power(999)

分析:

总的时间复杂度为o(sqrt(n)log n),再加上寻找质数花费的时间,总的时间复杂度为o(n^2 sqrt(n)log n)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

python实现事件驱动

本文实例为大家分享了python实现事件驱动的具体代码,供大家参考,具体内容如下 EventManager事件管理类实现,大概就百来行代码左右。 # encoding: UTF-8...

python多线程与多进程及其区别详解

前言 个人一直觉得对学习任何知识而言,概念是相当重要的。掌握了概念和原理,细节可以留给实践去推敲。掌握的关键在于理解,通过具体的实例和实际操作来感性的体会概念和原理可以起到很好的效果。本...

pandas.DataFrame的pivot()和unstack()实现行转列

pandas.DataFrame的pivot()和unstack()实现行转列

示例:有如下表需要进行行转列: 代码如下: # -*- coding:utf-8 -*- import pandas as pd import MySQLdb from wa...

Python如何判断数独是否合法

介绍 该数独可能只填充了部分数字,其中缺少的数字用 . 表示。 注意事项 一个合法的数独(仅部分填充)并不一定是可解的。我们仅需使填充的空格有效即可。 解体思路 将数独按照行、列和...

Python实现图片转字符画的代码实例

Python实现图片转字符画的代码实例

原理 1. 计算出图片颜色对应的灰度值,计算公式如下     gray = 0.2126 * r + 0.7152 * g + 0.0722 * b 2...