昨日问题
这道题出自codeforces,链接:https://codeforces.com/gym/102646/problem/A1
这道题是一个简单的因子拆分问题,对于一个数x来说,我们需要先找到它所有的因子。然后枚举一下因子的组合情况就可以了,因为n的范围很小只有2000。对于2000以内的数而言,它的因子数量不会很多。
题目虽然要求的是找到三个因子i,j,k,但是对于确定的n而言,当i和j确定了,k也就确定了,所以只需要两重循环遍历一下就可以了。
所以这道题一共可以分成两个步骤,第一个步骤是对于x我们找到它所有的因子,其次我们用i和j两个变量遍历因子,再计算出k,计算一下满足条件的i,j和k的数量即可。由于n的范围比较小,我们基本上怎么玩都可以,只要不超过n方的复杂度都可以接受的。
import math
def factorization(n):
factors = []
# 获取因子只需要遍历到根号n即可
for i in range(1, int(math.sqrt(n)) + 1):
if n % i == 0:
factors.append(i)
if i != n // i:
factors.append(n // i)
cnt = 0
for i in factors:
for j in factors:
if i * j > n or n % (i * j) != 0:
continue
k = n // (i * j)
if i <= j <= k:
cnt += 1
return cnt
n = int(input())
for i in range(1, n+1):
print(factorization(i))
给定两个相同长度的序列A和B,我们要用A和B两个序列合并成新的序列C。每次我们从这两个序列其中一个头部拿走一个元素放入C末尾,直到A和B序列为空为止。
请问以这种方法得到的字典序最小的C。
input
7
6 10 4 2 13 12 7
9 8 11 3 5 1 14
output
6 9 8 10 4 2 11 3 5 1 13 12 7 14