L1-006 连续因子 Python

L1-006 连续因子-20 分

题目

一个正整数 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   #用于计算 math.sqrt(num) ,如果前 math.sqrt(num)+1 中每个数都不能如num整除,说明num为质数

num = int(input())   #输入正整数N

resultLen = 0   #最终得到的连续因子个数
resultList = []   #最终得到的因子序列
flaPrime = True   #标识质数

# 枚举,start即因子序列的第一个数。从2开始,因为最长连续因子序列不包括1
for start in range( 2,  int(  math.sqrt(num)  )+1  ):
    factor = start   #给因子1赋值为因子序列的第一个值
    tempNum = num   #保存单次相除之后的临时结果
    tempList = []   #保存以start为开头的因子序列内容

    # 判断目前因子与临时结果相除是否能够整除
    while tempNum % factor == 0:
        tempList.append(str(factor))   #将能除的因子添加到临时保存此次连续因子序列的列表中,添加str()函数,将结果从int类型转化为str类型,是方便最后输出时,与符号'*'相结合
        tempNum = tempNum // factor   #将整除之后的结果保存到临时结果中
        factor += 1   #保证之后的因子是连续的,做加一操作之后,继续相除
        flaPrime = False   #表示num是否为质数,已进入此while循环,说明,num一定不是质数
    tempLen = factor-start   #计算以start开头的连续因子序列的长度

    # 如果临时的连续因子序列比之前的长,则进入循环,更新结果连续因子序列
    # 而且不能等于,因为要求最小的连续因子序列,start是按照从小到大的循序进行枚举的,所以隐含满足这个条件。
    if tempLen > resultLen :
        resultLen = tempLen   #更新结果连续因子序列长度
        resultList = tempList   #更新结果连续因子序列内容

# 如果num不为质数,则输出个数和结果。
# 如果是质数,则num只有 num = 1*num。规定1不算在内,所以,最长连续因子序列只能为num本身,且个数为1
if flaPrime == False :
    print(resultLen)
    print("*".join(resultList))
else:
    print(1)
    print(num)
  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值