CFCF2158F2.Distinct GCDs (Hard Version)
NOI/NOI+/CTSC
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
这是本题的困难版本。本版本与简单版本的区别在于 n≤5000。只有当你解决了所有版本后才能进行 hack。
传说中,高斯小时候老师曾经让全班算 1 到 100 的和,可能只是为了让学生能安静一会儿。然而,年轻的高斯很快就想出了公式 sum=2n(n+1),只用片刻就算出了答案。几个世纪以后,你在噩梦中见到高斯,他又给你出了一个极具挑战性的任务……
给定一个正整数 n,请你构造一个整数序列 [a1,a2,…,an],其中 1≤ai≤1018(对于所有 1≤i≤n),并满足相邻元素的 最大公约数(GCD) 两两互不相同。形式化地讲,
gcd(ai,ai+1)=gcd(aj,aj+1) 对于所有 1≤i<j<n 都成立。
此外,序列 a 应使得不同元素的数量尽可能少。
输入格式
每组测试数据包含多组测试用例。第一行为测试用例个数 t(1≤t≤200)。每组测试用例仅一行,包含单个整数 n(2≤n≤5000),表示所需构造的序列长度。
输出格式
对于每个测试用例,输出 n 个空格分隔的正整数 a1,a2,…,an,保证 1≤ai≤1018 并满足题中的所有条件。如果有多种方案,可以输出任意一种。
可以证明,在题目约束范围内,总是存在解。
输入输出样例
输入#1
3 2 5 7
输出#1
2 2 1 4 4 6 6 4 4 6 6 9 9 4
说明/提示
对于第二个测试用例,相邻元素的最大公约数为 [gcd(1,4),gcd(4,4),gcd(4,6),gcd(6,6)]=[1,4,2,6],均不相同。
对于第三个测试用例,相邻元素的最大公约数为 [gcd(4,4),gcd(4,6),gcd(6,6),gcd(6,9),gcd(9,9),gcd(9,4)]=[4,2,6,3,9,1],均不相同。
对于每个测试用例,可以证明不存在使用更少不同元素的序列,使得所有相邻最大公约数两两不同。