一个正整数 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)

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐