python函数质因数 python 求因数

一个Python函数,求一个数质因子,总是报错?

1. 首先解决你的语法问题

创新互联专注为客户提供全方位的互联网综合服务,包含不限于网站制作、成都网站设计、巧家网络推广、小程序制作、巧家网络营销、巧家企业策划、巧家品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供巧家建站搭建服务,24小时服务热线:18980820575,官方网址:www.cdcxhl.com

i和j是局部变量,只在当前for循环的语句内有效,所以,你的if j==i这一句就访问了一个失效的变量j,同样你的递归调用一样访问了j,因此我建议你在外层循环上面加上一句i = j = 2(反正赋初值不要用0就行,因为你的递归调用k/j可能造成除0异常)

2. 算法问题

你采用了递归求解,k==1作为递归退出条件本身是正确的,而作为参数合法性判断则显得有些不足,我建议应该修改为k = 1。

另外,你的算法会存在一个不影响正常功能的小缺陷,那就是可能重复打印质因子,比如算100的质因子,就会重复打印出两个2和两个5,因为先算出100的质因子2以后,接着算100/2的质因子,而50同样存在质因子2,整个过程就变成了

kj(100)

kj(50)

kj(25)

kj(5)

因此结果是

2

2

5

5

关于这一点,你可以忽略不计,或者通过调整代码自己进行规避

希望我的回答能够对你有所帮助

python求质数的算法

为大家分享了多种方法求质数python实现代码,供大家参考,具体内容如下

题目要求是求所有小于n的质数的个数。

求质数方法1:

穷举法:

根据定义循环判断该数除以比他小的每个自然数(大于1),如果有能被他整除的就不是质数:

def countPrimes1(self, n):

"""

:type n: int

:rtype: int

"""

if n=2:

return 0

else:

res=[]

for i in range(2,n):

flag=0 # 质数标志,=0表示质数

for j in range(2,i):

if i%j ==0:

flag=1

if flag==0:

res.append(i)

return len(res)

求质数方法2:

利用定理:如果一个数是合数,那么它的最小质因数肯定小于等于它的平方根。所以判断一个数是否是质数,只需判断它是否能被小于它开根后的所有数整除。这样做的运算会少很多。

def countPrimes2(self, n):

if n=2:

return 0

else:

res=[]

for i in range(2, n):

flag=0

for j in range(2, int(math.sqrt(i))+1):

if i % j == 0:

flag = 1

if flag == 0:

res.append(i)

return len(res)

求质数方法3:

利用定理:如果一个数是合数,那么它的最小质因数肯定小于等于它的平方根。我们可以发现只要尝试小于等于平方根的所有数即可。列举从 3 到根号x的所有数,还是有些浪费。比如要判断101是否质数,101的根号取整后是10,需要尝试的数是1到10。但是可以发现,对9的尝试是多余的。不能被3整除,必然不能被9整除……顺着这个思路走下去,其实,只要尝试小于根号x的质数即可。而这些质数,恰好前面已经算出来了,已经存在res中了。

def countPrimes3(self, n):

if n = 2:

return 0

else:

res = []

for i in range(2, n):

flag = 0

for j in res:

if i % j == 0:

flag = 1

if flag == 0:

res.append(i)

return len(res)

希望对大家有帮助

求Python的质因数分解

x=eval(input("请输入小于1000的整数:"))

k=2

print(x,"=",end="")

while x1:

if x%k==0:

  print(k,end="")

  x=x/k

  if x1:

      print("*",end="")

else:

  k=k+1

使用python将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。应该要怎么做?

对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:

(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。

(2)如果nk,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。

(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

程序源代码:

实例(Python 2.0+)

#!/usr/bin/python

# -*- coding: UTF-8 -*-

def reduceNum(n):

print '{} = '.format(n),

if not isinstance(n, int) or n = 0 :

print '请输入一个正确的数字 !'

exit(0)

elif n in [1] :

print '{}'.format(n)

while n not in [1] : # 循环保证递归

for index in xrange(2, n + 1) :

if n % index == 0:

n /= index # n 等于 n/index

if n == 1:

print index

else : # index 一定是素数

print '{} *'.format(index),

break

reduceNum(90)

reduceNum(100)

以上实例输出结果为:

90 = 2 * 3 * 3 * 5100 = 2 * 2 * 5 * 5


分享文章:python函数质因数 python 求因数
标题路径:http://pwwzsj.com/article/hjdejj.html