L1-006 连续因子 (20 分)

摘要
Title: L1-006 连续因子 (20 分)
Tag: 约数
Memory Limit: 64 MB
Time Limit: 1000 ms

Powered by:NEFU AB-IN

Link

L1-006 连续因子 (20 分)

  • 题意

    一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。

  • 思路

    首先求出nn的所有约数,将其排序
    之后遍历约数,求出最长的连续串

    注意

    • 串的乘积不能大于n
    • n=1n=1时,不存在串
    • nn除余串的乘积需要存在
  • 代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    '''
    Author: NEFU AB-IN
    Date: 2022-04-13 18:33:28
    FilePath: \ACM\GPLT\L1-006.PY
    LastEditTime: 2022-04-13 19:05:33
    '''
    from collections import Counter
    from copy import deepcopy

    n = int(input())
    v = []
    i = 1
    while i <= n // i:
    if n % i == 0:
    v.append(i)
    if i != n // i:
    v.append(n // i)
    i += 1
    v.sort()

    if n == 1:
    print(0)
    exit(0)
    if len(v) == 2:
    print(1)
    print(n)
    exit(0)

    v = v[1:len(v) - 1]

    i = 0
    while i < len(v):
    if i == 0:
    mx, ans, cnt, res, kkk = 1, 1, v[i], [v[i]], [v[i]]
    i += 1
    continue
    if v[i - 1] + 1 == v[i] and v[i] * cnt <= n and n % (v[i] * cnt) == 0:
    ans += 1
    cnt *= v[i]
    res.append(v[i])
    if ans > mx:
    mx = ans
    kkk = deepcopy(res)
    else:
    if v[i - 1] + 1 == v[i]:
    i -= 1
    res = [v[i]]
    ans = 1
    cnt = v[i]
    i += 1

    print(mx)
    kkk = list(map(str, kkk))
    print("*".join(kkk))
使用搜索:谷歌必应百度