L1-006 连续因子
一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。
输入格式:
输入在一行中给出一个正整数 N(1<N<2
31
)。
输出格式:
首先在第 1 行输出最长连续因子的个数;然后在第 2 行中按 因子1*因子2*……*因子k 的格式输出最小的连续因子序列,其中因子按递增顺序输出,1 不算在内。
输入样例:
630
输出样例:
3
5*6*7
import math
num = int(input())
i=2
str_max=''
while i<=math.sqrt(num): #对num开方 是个数最少的因数
#之后的数不存在 连续因子序列
j=i
num1=num
str1 = ''
min=1
while num1%j==0: #发现一个因子
str1=str1+(str(j)+'*') #加入字符串
if len(str1.split('*'))>len(str_max.split('*')):
str_max=str1 #分割后的列表长度 才是因子们最真实的个数
num1/=j #以下是 步长
j+=1
i+=1
if str_max=='': #如果为空 代表是 质数
print(1) #那么最小因数 就是 他的本身
print(num)
else: #不为空 就输出 他的最小的连续因子序列
print(int(len(str_max)/2))
print(str_max[:-1])
# #求最长连续因子个数,,输出最小连续因子序列
# n=int(input())
# sum1=1
# b=[]
# c=[]
# for i in range(1,n):
# while sum1 < n:
# sum1*=i
# b.append(i)
# for j in range(len(b)):
# if b[j+1]-b[j]==1:
# c.append(b[j])
# print(len(c))
# print(c.join("*"))
# n = int(input())
# sum1 = 1
# b = []
# c = []
# for i in range(1, n):
# sum1 *= i
# b.append(i)
# while sum1 > n:
# sum1 //= b.pop(0)
# if sum1 == n:
# if len(b) > len(c):
# c = b.copy()
# print(len(c))
# print("*".join(str(x) for x in c))