菜鸟教程 -- 学的不仅是技术,更是梦想!

Python 基础教程
(追記) (追記ここまで)

Python 练习实例14

Python 100例 Python 100例

题目:将一个正整数分解质因数。例如:输入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 -*-defreduceNum(n): print'{} = '.format(n), ifnotisinstance(n, int)orn <= 0 : print'请输入一个正确的数字 !'exit(0)elifnin[1] : print'{}'.format(n)whilennotin[1] : # 循环保证递归forindexinxrange(2, n + 1) : ifn % index == 0: n /= index# n 等于 n/indexifn == 1: printindexelse : # index 一定是素数print'{} *'.format(index), breakreduceNum(90)reduceNum(100)

实例(Python 3.0+)

#!/usr/bin/python3defreduceNum(n): print('{} = '.format(n), end="")ifnotisinstance(n, int)orn <= 0 : print('请输入一个正确的数字 !')exit(0)elifnin[1] : print('{}'.format(n))whilennotin[1] : # 循环保证递归forindexinrange(2, n + 1) : ifn % index == 0: n //= index# n 等于 n//indexifn == 1: print(index)else : # index 一定是素数print('{} *'.format(index), end="")breakreduceNum(90)reduceNum(100)

以上实例输出结果为:

90 = 2 * 3 * 3 * 5
100 = 2 * 2 * 5 * 5

Python 100例 Python 100例

AI 思考中...

15 篇笔记 写笔记

  1. #0

    小天儿

    102***[email protected]

    30

    使用 Python3 的参考解法:

    #!/usr/bin/python3
    x = int(input("是否进入循环?是:1, 否:0\n"));
    while(x):
     n = int(input("请输入一个正整数:"));
     print ("%d = " %n , end = '');
     while n not in [1]:
     for index in range(2, n+1):
     if n % index == 0:
     n = int(n/index);
     if n == 1:
     print("%d " %index , end = '');
     else:
     print("%d * " %index , end = '')
     break;
     print();
     x = int(input("是否进入循环?是:1, 否:0\n"));
    

    输出测试如下所示:

    是否进入循环?是:1, 否:0
    1
    请输入一个正整数:90
    90 = 2 * 3 * 3 * 5 
    是否进入循环?是:1, 否:0
    1
    请输入一个正整数:100
    100 = 2 * 2 * 5 * 5 
    是否进入循环?是:1, 否:0
    0

    小天儿

    102***[email protected]

    9年前 (2017年04月19日)
  2. #0

    JohnLee

    372***[email protected]

    29

    使用 Python3 的参考解法:

    #!/usr/bin/python3
    def prime(n):
     l = []
     while n > 1:
     for i in range(2, n + 1):
     if n % i == 0:
     n = int(n / i)
     l.append(i)
     break 
     return l
    s = input("输入一个正整数:")
    if s.isdigit() and int(s) > 0:
     print(s, "=", "*".join([str(x) for x in prime(int(s))]))
    else:
     print("请输入正确的正整数")
    

    JohnLee

    372***[email protected]

    9年前 (2017年04月19日)
  3. #0

    Chivalry

    825***[email protected]

    13

    参考解法:

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    input = int(raw_input("请输入要分解的正整数:"))
    temp = []
    while input!=1:
     for i in range(2,input+1):
     if input%i == 0:
     temp.append(i)
     input = input/i
     break
    print temp
    

    Chivalry

    825***[email protected]

    9年前 (2017年04月25日)
  4. #0

    Eric

    382***[email protected]

    2

    参考方案:

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    import math
    l=[]
    def resolve(num):
     do=0
     if num<1:
     return
     elif num==1:
     l.append(num)
     return
     for i in range(2,int(math.sqrt(num))+1):
     if num%i==0:
     do=1
     l.append(i)
     num=num/i
     resolve(num)
     break
     if do==0:
     l.append(num)
    num=int(raw_input())
    resolve(num)
    print l
    print "%d ="%num,
    for k in range(len(l)):
     if k!=len(l)-1:
     print "%d *"%l[k],
     else:
     print "%d" % l[k]
    

    Eric

    382***[email protected]

    9年前 (2017年04月25日)
  5. #0

    Kunz

    sun***[email protected]

    19

    我的貌似更简单更好理解一些:

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    n=int(raw_input('Please input a number:'))
    n1=n
    l=[]
    while n>1:
     for i in range(2,n+1):
     if n%i==0:
     n=n/i
     l.append(str(i))
     break
    print '%d=' %n1 + '*'.join(l)
    

    Kunz

    sun***[email protected]

    9年前 (2017年05月09日)
  6. #0

    Almighty

    132***[email protected]

    1

    Python3 参考方法:

    #!/usr/bin/env python3
    from math import sqrt
    flag = 0
    n = int(input("输入一个整数:"))
    print("%d="%n,end="")
    m = int(sqrt(n)) + 1
    for j in range(n):
     for i in range(2,m):
     if n%i == 0:
     if n == i:
     flag = 1
     print("%d"%i,end='')
     else:
     print("%d*"%i,end='')
     n /= i
     break
     if flag == 1:
     break
    

    Almighty

    132***[email protected]

    9年前 (2017年05月29日)
  7. #0

    Mark

    104***[email protected]

    3

    Python3.6 这种写法能够运行更大的数字

    #!/usr/bin/python3
    x=input("输入一个正整数:")
    if x.isdigit() and int(x)>0: 
     x=int(x)
     t,i=1,2
     print(x,end="=")
     while t>=0:
     if x%i==0:
     print(i,end="")
     x/=i 
     t=x-i
     if x!=1:
     print("*",end="")
     while x%i and x!=1:
     i+=1
    else:
     print("请输入正确的正整数")

    Mark

    104***[email protected]

    9年前 (2017年06月27日)
  8. #0

    CosmosHua

    cos***[email protected]

    6

    Python3简明解法:

    def factor(n):
     fac = []
     hf = n//2
     while n>1:
     for i in range(2, hf+1):
     if n%i == 0:
     n //= i; fac.append(i); break
     return fac
    n = int(input("input a number: "))
    print(n, "=", factor(n))

    CosmosHua

    cos***[email protected]

    9年前 (2017年07月11日)
  9. #0

    kevinjin

    314***[email protected]

    1

    参考方法:

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    num=raw_input('输入一个整数:\n')
    num=int(num)
    print '%d =' %num,
    i=2
    while i<=num:
     if num%i==0:
     if num==i:
     print '%d' %i,
     break
     else:
     num=num/i
     print '%d *' %i,
     else:
     i+=1
    

    kevinjin

    314***[email protected]

    9年前 (2017年07月24日)
  10. #0

    小差罗

    675***[email protected]

    5

    Python 3.x 下测试

    办法比较蠢 但是挺好理解的吧循环次数不多,定义素数函数,能被素数整除就输出

    import math
    def isprime(num):
     flag=1
     for i in range(2,int(math.sqrt(num))+1):
     if num%i==0:
     flag=0
     break
     if flag:
     return True
     else:
     return False
     
    num=int(input('input a number:'))
    print(num,'=',end='')
    while(not isprime(int(num))):
     for i in range(2,int(num)):
     if num%i==0:
     print(i,'*',end='')
     num/=i
     break
    print(int(num)) 
    

    小差罗

    675***[email protected]

    9年前 (2017年09月12日)
  11. #0

    大大大大大大大熊

    382***[email protected]

    2

    Python3 参考方法:

    import math
    print("请输入一个正整数:")
    n = int(input())
    if n <= 0:
     print("请输入正整数")
    i=2
    if n!=1:
     while i!=n:
     if n % i == 0:
     print(i)
     n = n // i
     else:
     i+=1
     print(i)
    else:
     print(n)

    大大大大大大大熊

    382***[email protected]

    9年前 (2017年09月19日)
  12. #0

    wuhangxiang

    yef***[email protected]

    1

    参考方法:

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    n=2
    def fenjie(num):
     global n
     while n<=num:
     if n==num:
     print n
     break
     elif n<num and num%n==0:
     print '%d*'%n,
     num/=n
     fenjie(num)
     break
     elif n<num and num%n!=0:
     n+=1
     fenjie(num)
     break
    number=input("input a number:")
    print '%d='%number,
    fenjie(number)

    wuhangxiang

    yef***[email protected]

    9年前 (2017年10月24日)
  13. #0

    Echo

    csz***[email protected]

    1

    函数处理, 兼容 python2.x 与 python3.x

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    num = int(input('请输入需要分解的数:'))
    def fenjie(num):
     strf = '{}='.format(num)
     flag = True
     while flag:
     for i in range(2,num+1):
     if not num%i:
     if i==num:
     flag = False
     strf = strf + str(i)
     else:
     strf = strf + str(i) + '×'
     num = num//i
     break
     return strf
    print(fenjie(num))
    

    Echo

    csz***[email protected]

    9年前 (2017年12月05日)
  14. #0

    阳光不锈

    173***[email protected]

    2

    Python3 下测试:

    #生成器函数prime,返回一个质数生成器prime(),可以生成所有质数。
    def prime():
     i=2
     while 1:
     for j in range(2,i):
     if i%j==0:
     i+=1
     break
     else:
     yield i
     i+=1
     
    k=int(input("是否进入循环?是:1, 否:0\n")) 
    while k:
     n=int(input('请输入一个大于1的正整数:'))
     print(str(n)+'=',end='')
     flag=1
     while flag:
     for i in prime():
     if not n%i:
     if i==n:
     flag=0
     print(i)
     else:
     print(str(i)+'*',end='')
     n=n//i
     break
     print('\n')
     k=int(input("是否进入循环?是:1, 否:0\n"))

    阳光不锈

    173***[email protected]

    9年前 (2018年02月09日)
  15. #0

    阳光不锈

    173***[email protected]

    3

    Python3: 使用一个生成器 f(x),生成整数 x 的所有质因数。代码如下:

    #isprime函数,x是素数返回1,不是返回0
    def isprime(x):
     for i in range(2,x):
     if x%i==0:
     return 0
     else:
     return 1
    #生成器f(x),生成整数x的所有质因数
    def f(x):
     while not isprime(x):
     for i in range(2,x):
     if x%i==0:
     x=x//i
     yield i
     break
     yield x
    k=int(input('是否继续求解?是:1, 否:0\n'))
    while k:
     n=int(input('num:'))
     print(str(n)+'=',end='')
     s=''
     for j in f(n):
     s+=str(j)+'*' 
     print(s[:-1])
     print()
     k=int(input('是否继续求解?是:1, 否:0\n'))

    阳光不锈

    173***[email protected]

    9年前 (2018年02月12日)

点我分享笔记

  • 昵称 (必填)
  • 邮箱 (必填)
  • 引用地址

AltStyle によって変換されたページ (->オリジナル) /