鱼C论坛

 找回密码
 立即注册
楼主: 新手·ing

[技术交流] Python:每日一题 9

[复制链接]
发表于 2017-8-8 21:56:43 | 显示全部楼层
  1. def mab(t):
  2.     result = []
  3.     res = '%d=' % t
  4.     i = 2
  5.     result= []
  6.     while True:
  7.         if t == 1:
  8.             break
  9.         if not (t%i):
  10.             result.append(i)
  11.             t /= i
  12.         else:
  13.             i += 1
  14.     #拼接
  15.     temp = ''
  16.     for i in result:
  17.         temp += str(i)
  18.     return ''.join([res,'*'.join(temp)])
复制代码

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
新手·ing + 4 + 4 泥奏凯

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-20 21:37:11 | 显示全部楼层
  1. n = int(input('请输入需要分解的数:'))
  2. list1 = []
  3. def fp(n):
  4.     i = 2
  5.     while n % i != 0:
  6.         i += 1
  7.     list1.append(i)
  8.     n /= i
  9.     if n != 1:
  10.         fp(n)
  11. fp(n)
  12. result = '%d='%n
  13. for each in list1:
  14.     result = result + '%d*'%each
  15. result = result[:-1]
  16. print(result)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-12 23:12:47 | 显示全部楼层
  1. def Decomposing_Factor(number):
  2.     Factor_List = []
  3.     Min_Prime = 2
  4.    
  5.     while(number > 0):
  6.         if 1 == number:
  7.             Factor_List.append(number)
  8.             print "1 decomposing factor is 1."
  9.             break;
  10.         if Min_Prime == number: # Description the decomposing_factor process ends
  11.             Factor_List.append(number)
  12.             break;
  13.         else:
  14.             if number % Min_Prime == 0:  # Divisible 2, this number is even
  15.                 number = number / Min_Prime
  16.                 Factor_List.append(Min_Prime)
  17.             else:
  18.                 Min_Prime += 1

  19.     return Factor_List

  20. number = int(raw_input("Enter a Positive number: "))
  21. Factor = []
  22. result = str(number) + "="
  23. if number > 0:
  24.     Factor = Decomposing_Factor(number)
  25.     for each in Factor:
  26.         result = result + '%d*' % each
  27. result = result[:-1]
  28. print result
复制代码


8位数字就比较慢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-14 16:28:17 | 显示全部楼层
def fac1(n):
    result = []
    result.extend([n,'='])
    def fac(n):
        for i in range(2,n+1):
            if n % i == 0:
                if n == i:
                    result.append(i)
                    for i in result:
                        print(i,end='')
                    break
                else:
                    result.append(i)
                    result.append('*')
                    return fac(n//i)
    fac(n)
fac1(100)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-28 23:43:29 | 显示全部楼层
n=int(input())
if n == 1:
    print (n,'=',n)
else:
    print (n,'=',end=' ')

for k in range(2,n+1):
    while n%k==0 :
        print (k,end='')
        n=n/k
        if n>1:
            print ('*',end='')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-29 00:15:46 | 显示全部楼层
for i in range(1,100000):
    n=int(input('请输入一个整数:'))
    if n == 1:
        print (n,'=',n)
    else:
        print (n,'=',end=' ')

    for k in range(2,n+1):
        while n%k==0 :
            print (k,end='')
            n=n/k
            if n>1:
                print ('*',end='')
可以无限循环输入,本来想用while循环呢,但是搞不出来,哪位大神可以帮忙编一下while循环的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-16 15:55:43 | 显示全部楼层
m=[]
def zs(n):
    for x in range(2,n+1):
        if n%x==0:
          m.append(x)
          mix=x
          if n==mix:
              return m
          if n!=mix:
              return zs(int(n/x))
zs(50)
print(m)
有什么意见或问题请大佬指正
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-9 18:00:53 | 显示全部楼层
  1. n=int(input('请输入一个正整数:'))
  2. for i in range(2,n+1):
  3.     if n>=i:
  4.         while n%i==0:
  5.             n=n/i
  6.             print(i)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-9 18:01:20 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-21 22:08:26 | 显示全部楼层
  1. n = int(input('输入正整数:'))
  2. k = 2
  3. list1 = []
  4. while k:
  5.     if n == k:
  6.         list1.append(k)
  7.         break
  8.     if n != k:
  9.         if n%k == 0:
  10.             list1.append(k)
  11.             n /= k
  12.         else:
  13.             k += 1
  14. print(list1)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-1 17:35:47 | 显示全部楼层
本帖最后由 shigure_takimi 于 2017-12-1 19:30 编辑
  1. def isPrime(n):
  2.     if n < 2:
  3.         return False
  4.     elif n == 2:
  5.         return True
  6.     else:
  7.         for i in range(2, int(n**0.5)+1):
  8.             if n%i == 0:
  9.                 return False
  10.         else:
  11.             return True

  12. def allPrimeLessThan(n): # 小于n的所有质数
  13.     allPrimeList = []
  14.     for i in range(2, n+1):
  15.         if isPrime(i):
  16.             allPrimeList.append(i)
  17.     return allPrimeList

  18. def splitNumberByPrime(n):
  19.     number = n
  20.     if n < 2:
  21.         print('%s小于2,无法分解!' % n)
  22.     elif isPrime(n):
  23.         print('%s是质数' % n)
  24.     else:
  25.         allFactor = []
  26.         allPrime = allPrimeLessThan(n)
  27.         while n != 1:
  28.             for i in allPrime:
  29.                 if n%i == 0:
  30.                     allFactor.append(i)
  31.                     n = n // i
  32.         print(number,'=', ' * '.join([str(i) for i in sorted(allFactor)]))

  33. splitNumberByPrime(90)
  34. splitNumberByPrime(1)
  35. splitNumberByPrime(2)
  36. splitNumberByPrime(3)
  37. splitNumberByPrime(150)

  38. Result:
  39. 90 = 2 * 3 * 3 * 5
  40. 1小于2,无法分解!
  41. 2是质数
  42. 3是质数
  43. 150 = 2 * 3 * 5 * 5
复制代码


##  以上方法很笨,很大的数就很费时间。
## 楼上的Python玲玲的方法就很好,简洁高效,学习了。

  1. n = int(input('输入正整数:'))
  2. k = 2
  3. list1 = []
  4. while k:
  5.     if n == k:
  6.         list1.append(k)
  7.         break
  8.     if n != k:
  9.         if n%k == 0:
  10.             list1.append(k)
  11.             n /= k
  12.         else:
  13.             k += 1
  14. print(list1)
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-1 18:14:24 | 显示全部楼层
仰望楼上的大佬们互秀操作
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-13 13:47:22 | 显示全部楼层
def F_J_Z_Y_S(n):
                k = 2
                number = []
                while( k < int(n/2)+2):
                                while(n % k != 0):
                                                k += 1
                                                print(k)
                                if(n % k ==0) or n / k == 1:
                                                number.append(k)
                                                n = n / k
                                                
                                                print(n)
                                                
                                #print(k)
                return number
print(F_J_Z_Y_S(90))
运行结果如下:
45.0
3
15.0
5.0
4
5
1.0
[2, 3, 3, 5]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-18 17:55:54 | 显示全部楼层
# 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5

num=int(input("请输入一个正整数:"))
a=num
b=[]
i=2
while i<a:
    if a%i==0:
        b.append(i)
        a/=i
        i=2
        continue
    i+=1
if i==a:
    b.append(i)
c=len(b)
if c!=0:
    print('%s='%num,end='')
    for j in range(1,c+1):
        d=b.pop()
        print(d,end='')
        if j!=c:
            print('*',end='')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-20 09:13:41 | 显示全部楼层
  1. n = int(input())
  2. print(n,end='=')
  3. k = 2
  4. while k != n:
  5.     if n%k == 0:
  6.         print(k,end='*')
  7.         n /= k
  8.     else:
  9.         k = k+1
  10. print(int(n))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-5 15:02:55 | 显示全部楼层
  1. num = int(input())
  2. print(num,end="")
  3. print("=",end="")
  4. a = iter(range(2,num))
  5. while True:
  6.     c = next(a)
  7.     b = divmod(num,c)
  8.     if b[0] ==1 and b[1]==0:
  9.         print(c,end="")
  10.         break
  11.     if b[1] == 0:
  12.         print(c,end="")
  13.         print("*",end="")
  14.         a = iter(range(2,b[0]+1))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-5 15:59:18 From FishC Mobile | 显示全部楼层
新手·ing 发表于 2017-3-28 18:09
我的解答!!!

如果整数是120,这样输出的是2*3*4*5,然而结果应该是2*2*2*3*5啊,怎么解释
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-22 22:06:39 | 显示全部楼层
list1 = []
number = int(input("number:"))
i=2
while number != i :
    while number % i ==0:
        list1.append(i)
        number = int(number / i)
    i+=1
list1.append(number)
print(list1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-29 00:14:36 | 显示全部楼层
本帖最后由 checkily 于 2018-3-29 00:17 编辑

为了输出符合要求,绞尽脑汁了
  1. from functools import reduce


  2. def permit(n):
  3.     if n == 1:
  4.         return '%d=%s' % (reduce(lambda x, y: x*y, lis), '*'.join(str(i) for i in lis))
  5.     else:
  6.         for i in range(2, n+1):
  7.             if not n % i:
  8.                 lis.append(i)
  9.                 return permit(n // i)


  10. if __name__ == '__main__':
  11.     lis = []
  12.     print(permit(90))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-7 15:50:47 | 显示全部楼层
  1. #将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
  2. import math
  3. def isPrime(n):
  4.     if n==2:
  5.         return True
  6.     else:
  7.         x=int(math.sqrt(n))
  8.         for i in range(2,x+1):
  9.             if n%i==0:
  10.                 return False
  11.         return True

  12. def primelist(n):
  13.     if isPrime(n):
  14.         return str(n)
  15.     else:
  16.         for i in range(2,int(math.sqrt(n)+1)):
  17.             if n%i==0:
  18.                 break
  19.         return str(i)+'*'+primelist(n//i)

  20. print('90 = '+primelist(90))
  21.             

复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 13:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表