鱼C论坛

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

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

[复制链接]
发表于 2018-12-4 10:06:31 | 显示全部楼层
def num(n):
    num_l = [n]   
    while n:
        for i in range(2,n+1):
            if n % i == 0:
                if n != i:
                    num_l.append(i)
                    n = n // i
                    break
                if n == i:
                    num_l.append(i)
                    n = 0
                    break
    length = len(num_l)
    print("%d = "%num_l[0],end="")
    for i in range(1,length):
        if i != length-1:
            print(num_l[i],'*',end=' ')
        if i ==length-1:
            print(num_l[i])
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-17 21:15:18 | 显示全部楼层
  1. n = int(input('请输入一个正整数:'))
  2. print("%d ="%n,end='')
  3. for k in range(2, 200):  
  4.     while n!=k:
  5.         if n % k == 0:
  6.             print(k,end='*')
  7.             n= n/k
  8.         else:
  9.             k= k+1
  10.     if n == k:
  11.         print(k)
  12.         break
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-26 10:15:31 | 显示全部楼层
  1. def ex9(num):
  2.     x = 2
  3.     while num != 1:
  4.         if num % x == 0:
  5.             print(x)
  6.             return ex9(num / x)
  7.         x += 1


  8. ex9(90)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-13 11:17:25 | 显示全部楼层
def fenjie(all_num):
    if all_num>=2:
        k=2
        while(True):
            if all_num % k:
                k=k+1
            else:
                break
        return k
    else:
        return 1
   

yinshifenjie=[]
all_num=int(input("请输入一个正整数:"))
if all_num==1:
    yinshifenjie.append(1)
else:
    while(True):
        if all_num==1:
            break
        else:
            numout=fenjie(all_num)
            yinshifenjie.append(numout)
            all_num=all_num/numout

all_num=1
for i in yinshifenjie:
    all_num*=i

print(str(all_num)+"的因式分解为:   "+str(all_num),end=' = ')
for i in range(len(yinshifenjie)-1):
    print(str(yinshifenjie[i]),end=" * ")
print(yinshifenjie[-1])
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-13 12:02:40 | 显示全部楼层

def qiusushu(all_num):
   
    if all_num >3:
        for i in range(2,int(all_num **0.5)+1):
            if all_num % i:
                i=i+1
            else:
                print(i,end=" * ")
                return qiusushu(all_num//i)
        print(all_num)
        return -1
    else:
        print(all_num)
        return all_num


all_num=int(input("请输入一个正整数:"))
print(all_num,end=" = ")
qiusushu(all_num)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-26 20:51:58 | 显示全部楼层
这不是一个理想的方案,因为每次使用都必须先运行一下代码。
i = 2
def devi(n):
   
    if n == 2:
        print(i)
    elif n > i:
        if n % i == 0:
            print(i)
            n = n/i
            
        else:
            i += 1
        devi(n)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-7 21:13:40 | 显示全部楼层
import math
def zhishu(n):
    for i in range(2,n+1):
        if not (n % i):
            if i == n:
                return [i]
            else:
                return [i]+zhishu(int(n/i))
def bprime(n):
    lista =[]
    d = int(math.sqrt(n+1))
    for j in range(2,d+1):
        if not(n % j):
            lista.append(j)
            lista += zhishu(int(n/j))
            return lista
        if j == d:
            return 0

if __name__ == "__main__":
    for x in range(2,100):
        a = bprime(x)
        if not a:
            print("%d是素数"%x)
        else:
            print('%d=%s'%(x,'*'.join(str(s) for s in a)))
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-8 23:07:47 | 显示全部楼层
本帖最后由 panheng 于 2019-8-8 23:13 编辑

写得有点长,交作业后看大神的代码,感觉可以用递归方法。
  1. #题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

  2. #解法1:先求出小于等于此数的质数加入列表,然后从列表每次取出一个质数循环查找质因数直到其本身为质数。
  3. def answer1(n):
  4.     result = "%d = " % n                   #输出结果固定传入初始数字
  5.     list1 = []                             #质数数列
  6.     list2 = []                             #目标质因数数列
  7.     for num in range(2,n):
  8.         for j in range(2,int(num**0.5)+1):
  9.             if num % j == 0:
  10.                 break
  11.         else:
  12.             list1.append(num)              #求得n以内质数数
  13.     conctrl = 1                            #定义循环控制变量
  14.     while conctrl:
  15.         for each in list1:
  16.             if n % each == 0:
  17.                 n = n / each                # n重新赋值为分解质因数后结果
  18.                 list2.append(each)          # 加入目标数列
  19.                 break
  20.         else:
  21.             conctrl = 0
  22.     for each in list2:                      #定义输出格式
  23.         each = str(each)+" * "
  24.         result += each
  25.     if len(list2) == 1:
  26.         print('输入的是一个质数!')
  27.     else:
  28.         print(result[:-3])                  #切片去除最后的星号
  29.         
  30. if __name__ == '__main__':
  31.     n = int(input("请输入一个正整数:"))
  32.     answer1(n)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-26 20:57:22 | 显示全部楼层
  1. from math import *

  2. #判断是否是质数
  3. def judge(num):
  4.           a = int(sqrt(num))
  5.           flag = 0
  6.           for each in range(2,a):
  7.                     if num%each==0:
  8.                               flag =1
  9.           return flag

  10. def main():
  11.           num = int(input('请输入一个正整数:'))
  12.           print('%d='%num,end='')
  13.           list1=[]
  14.           for each in range(2,num):
  15.                     if judge(each):
  16.                               if (num%each==0):
  17.                                         list1.append(each)
  18.           last = list1.pop()
  19.           for each in list1:
  20.                     print('%d*'%each,end='')
  21.           print('%d'%last)
  22. if __name__ =='__main__':
  23.           main()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-26 20:58:13 | 显示全部楼层
冬雪雪冬 发表于 2017-3-28 22:54
在知乎上看到一个程序,写的不错,大家可以借鉴一下。

看不太懂,直接加一怎么判断是否是素数呀~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-22 13:01:50 | 显示全部楼层
import math
X = int(input('please enter an int number:'))
L = []
def fun9(X):
    for N in range(2,int(math.sqrt(X))+1):
        if((X%N)==0):               
            L.append(N)
            return fun9(X/N)                     
    L.append(int(X))
    print(L)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-5 14:57:24 From FishC Mobile | 显示全部楼层
a = input("请输入一个:")
while a.isdigit() != True:
    a = input("输入错误,重新输入:")
b = []
d = a
a = int(a)
c = 2
while True:
    if a == c:
        b.append(str(c))
        break
    elif a % c == 0:
        b.append(str(c)+'*')
        a = a / c
    else:
        c = c+1
e =d+'='
for i in range(len(b)):
    e = e+b[i]
print(e)
   
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-3 13:38:27 | 显示全部楼层
def prime(x):
    for i in range(2,x+1):
        if i == x:
            print(x)
            return x
        else:     
            if not x%i:
                print(int(i))
                return prime(int(x/i))
x = int(input('enter:'))
   
prime(x)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-10 17:50:11 | 显示全部楼层
  1. def prime(k):
  2.     A = []
  3.     # 从2-k判断有多少个质数
  4.     for i in range(2,k+1):
  5.         leap = 1
  6.         # 判断这个数是否为质数
  7.         for j in range(2,int(i**0.5+1)):
  8.             if i % j == 0:
  9.                 leap = 0
  10.                 break
  11.         if leap == 1:
  12.             A.append(i)
  13.     return A

  14. num = int(input("请输入一个数:"))
  15. B = []
  16. print(num,'=',end=' ')

  17. while num >1:
  18.     for i in prime(num):
  19.         if num%i == 0:
  20.             B.append(i)
  21.             num=num//i
  22.             break

  23. for j in range(len(B)):
  24.     if j==len(B)-1:
  25.         print(B[j])
  26.     else:
  27.         print(B[j],'*',end=' ')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-12 05:54:15 | 显示全部楼层
def f9(n):
    if n==2:
        print(n)
    else:
        print("%d="%n,end='')
        k=2
        while n>k:
            if n%k==0:
                print('%d*'%k,end='')
                n=n/k
            else:
                k+=1
        print('%d'%n)
    return "Well done!"
print(f9(2*3*5*7*11*13*17))
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-25 21:57:56 | 显示全部楼层
n = int(input())
n1 = 1.0
while n != n1:
    for i in range(2, int(n)+1):
        if n % i == 0:
            print("{} ".format(i), end="")
            n /= i
            break
        else:
            continue

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-29 22:51:13 | 显示全部楼层
  1. def factor(x):
  2.     n = 2
  3.     for i in range(2, int(x+1)):
  4.         if x % i == 0:
  5.             print(i)
  6.             return factor(x/i)
  7.             break
  8. while 1:
  9.     factor(int(input('Please type in a number for prime factor\n')))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-5 10:32:31 | 显示全部楼层
j = int(input("请输入一个数字:"))
k = j
for t in range(1,j):
    for i in range(2,j+1):
        if j%i==0:
            print('%s*'%i,end='')
            j = int(j/i)
            break;
print("=",k)

小生献丑
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-5 10:41:47 | 显示全部楼层
n=int(input('请输入一个正整数:'))
for i in range(2,n+1):
    while n%i==0:
        n=n/i
        print(i,"*",end='')

把四楼大哥的代码精简优化了一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-7 19:31:14 | 显示全部楼层
import math
c=input('请输入一个正整数:')
d=c+'='
c=int(c)
#质数表
zsb=[]
b=[]
zsb.append(2)
zsb.append(3)
for i in range (2,c+1):
    a=int(math.sqrt(i))
    for each in range(2,a+1):
        n=i%each
        if (n==0):
            break
        elif(each==a):
            zsb.append(i)
while (c != 1):
    for each in zsb:
        n=c%each
        if(n==0):
            b.append(each)
            c=c/each
            break
b.sort(reverse=True)
m=str(b.pop())
d=d+m
while(b):
    m=str(b.pop())
    d=d+'*'+m
print(d)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-30 03:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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