L1-006 连续因子(python)
一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。
·
一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。
输入格式:
输入在一行中给出一个正整数 N(1<N<231)。
输出格式:
首先在第 1 行输出最长连续因子的个数;然后在第 2 行中按 因子1*因子2*……*因子k
的格式输出最小的连续因子序列,其中因子按递增顺序输出,1 不算在内。
输入样例:
630
输出样例:
3
5*6*7
最开始想用for循环,但是发现,当不了整除之后,i只能接着往后找
比如输入420,420整除2、3后,变为70,此时4不能整除,i就会变成5,但实际上,420的最小连续因子为3*4*5,所以改用while循环,每次i可以变为前一个序列开始数字的后一位,这样就可以不漏掉任何一位
import math
n = int(input())
m = n
temp = 0
temp1 = 0
num = 0
i = 2
while i < int(math.sqrt(n)) + 4:
if m % i == 0: # 能整除,i++
m = m // i
num += 1
i += 1
else: # 不能整除,比较此时序列长度
if temp < num:
temp = num
temp1 = i - num # 序列的第一位数字
i = i - num + 1 # 刚刚第一位整除的数字往后找
num = 0
m = n
if temp:
print(temp)
for j in range(temp - 1):
print(temp1 + j, end="*")
print(temp1 + temp - 1)
elif temp == 0:
print(temp + 1)
print(n)
更多推荐
所有评论(0)