L1-006 连续因子 (20 分)
摘要
Title: L1-006 连续因子 (20 分)
Tag: 约数
Memory Limit: 64 MB
Time Limit: 1000 ms
Powered by:NEFU AB-IN
L1-006 连续因子 (20 分)
-
题意
一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。
-
思路
首先求出的所有约数,将其排序
之后遍历约数,求出最长的连续串注意
- 串的乘积不能大于n
- 当时,不存在串
- 除余串的乘积需要存在
-
代码
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))