鱼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])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-17 21:15:18 | 显示全部楼层
n = int(input('请输入一个正整数:'))
print("%d ="%n,end='')
for k in range(2, 200):  
    while n!=k:
        if n % k == 0:
            print(k,end='*')
            n= n/k
        else:
            k= k+1
    if n == k:
        print(k)
        break
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


ex9(90)
想知道小甲鱼最近在做啥?请访问 -> 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])
想知道小甲鱼最近在做啥?请访问 -> 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)
想知道小甲鱼最近在做啥?请访问 -> 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)
想知道小甲鱼最近在做啥?请访问 -> 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)))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

#解法1:先求出小于等于此数的质数加入列表,然后从列表每次取出一个质数循环查找质因数直到其本身为质数。
def answer1(n):
    result = "%d = " % n                   #输出结果固定传入初始数字
    list1 = []                             #质数数列
    list2 = []                             #目标质因数数列
    for num in range(2,n):
        for j in range(2,int(num**0.5)+1):
            if num % j == 0:
                break
        else:
            list1.append(num)              #求得n以内质数数
    conctrl = 1                            #定义循环控制变量
    while conctrl:
        for each in list1:
            if n % each == 0:
                n = n / each                # n重新赋值为分解质因数后结果
                list2.append(each)          # 加入目标数列
                break
        else:
            conctrl = 0
    for each in list2:                      #定义输出格式
        each = str(each)+" * "
        result += each
    if len(list2) == 1:
        print('输入的是一个质数!')
    else:
        print(result[:-3])                  #切片去除最后的星号
        
if __name__ == '__main__':
    n = int(input("请输入一个正整数:"))
    answer1(n)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

#判断是否是质数
def judge(num):
          a = int(sqrt(num))
          flag = 0
          for each in range(2,a):
                    if num%each==0:
                              flag =1
          return flag

def main():
          num = int(input('请输入一个正整数:'))
          print('%d='%num,end='')
          list1=[]
          for each in range(2,num):
                    if judge(each):
                              if (num%each==0):
                                        list1.append(each)
          last = list1.pop()
          for each in list1:
                    print('%d*'%each,end='')
          print('%d'%last)
if __name__ =='__main__':
          main()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

看不太懂,直接加一怎么判断是否是素数呀~
想知道小甲鱼最近在做啥?请访问 -> 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)
想知道小甲鱼最近在做啥?请访问 -> 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)
   
想知道小甲鱼最近在做啥?请访问 -> 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

while num >1:
    for i in prime(num):
        if num%i == 0:
            B.append(i)
            num=num//i
            break

for j in range(len(B)):
    if j==len(B)-1:
        print(B[j])
    else:
        print(B[j],'*',end=' ')
想知道小甲鱼最近在做啥?请访问 -> 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))
想知道小甲鱼最近在做啥?请访问 -> 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

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

使用道具 举报

发表于 2020-2-29 22:51:13 | 显示全部楼层
def factor(x):
    n = 2
    for i in range(2, int(x+1)):
        if x % i == 0:
            print(i)
            return factor(x/i)
            break
while 1:
    factor(int(input('Please type in a number for prime factor\n')))
想知道小甲鱼最近在做啥?请访问 -> 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)

小生献丑
想知道小甲鱼最近在做啥?请访问 -> 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='')

把四楼大哥的代码精简优化了一下
想知道小甲鱼最近在做啥?请访问 -> 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 23:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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