合理运用标志变量的重要性 —— PTA: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

这道题要求最长且最小的连续因子序列,仔细分析不难得出,因为序列是连续的,所以我们只要知道序列的第一个数字,和序列的长度,就能得到并输出该序列
因此 此问题转化为求解 序列首数字 和 序列长度
python代码:

a=int(input())
b=int(a**0.5)
strat=0  #记录连续乘积串的首数字
len=1 # 记录连续乘积串的长度
maxlen=0
# 只需要知道 首数字 和 长度   就可以输出求出的连续乘积串  提高了算法效率
for i in range(2,b+1):
    if a%i==0:
        x=i
        for k in range(i+1,b+2):
            x=x*k
            if a%x==0 and x<=a:
                len+=1
            else:
                 break
        if len>maxlen: #内层for结束循环后,判断当前序列长度,如果大于最大长度,更新maxlen
            maxlen=len
            strat=i
        len=1      #每次内层循环结束后,都要使len=1
if maxlen==0:      #质数或0
    print("%d\n%d"%(1,a))
else:
    print("%d\n%d"%(maxlen,strat),end="")
    l=1
    while l<maxlen:
        print("*%d"%(strat+l),end="")
        l+=1

特殊测试点以及答案
在这里插入图片描述
最后一个测试点是大数, 不能超时,即时间复杂度至少不能大于等于o(n)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值