题解 CF1497C1 【k-LCM (easy version)】
posted on 2021-03-20 08:26:53 | under 题解 | source
看数据范围,\(1\leq T\leq10^4\),\(1\leq n\leq 10^9\),显然是构造题。
我们分三类讨论:
- \(n\bmod 2=1\):显然可以先提出一个 \(1\),再把 \(n-1\) 分成两半,\(\operatorname{lcm}(1,\frac{n-1}{2},\frac{n-1}{2})=\frac{n-1}{2}\leq\frac{n}{2}\),符合题意。这样构造出的解是 \((1,\frac{n-1}{2},\frac{n-1}{2})\) 也就是 \((1,\left\lfloor\frac{n}{2}\right\rfloor,\left\lfloor\frac{n}{2}\right\rfloor)\)。
- \(n\bmod 4=0\):可以把 \(n\) 拆成 \((\frac{n}{2},\frac{n}{4},\frac{n}{4})\),显然它们一定是正整数(\(n\bmod 4=0\))且符合题意。
- \(n\bmod 4\neq 0\) 且 \(n\bmod 2=0\):看上去我们只能把它分成 \((\frac{n}{2},\frac{n}{2})\),我们换个思路,从两个 \(\frac{n}{2}\) 中各提出一个 \(1\),把 \(n\) 拆成 \((2,\frac{n}{2}-1,\frac{n}{2}-1)\)。为什么这样是正确的呢?因为 \(n\bmod 4\neq 0\),所以 \(n\div 2\) 一定是奇数,可以列几个数试试看。又有 \(\operatorname{lcm}(2,\text{奇数}-1,\text{奇数}-1)=\text{奇数}-1\),所以符合题意。
int n,k;
int mian(){
scanf("%d%d",&n,&k);
if(n%2==1) printf("1 %d %d",n/2,n/2);
else if(n%4==0) printf("%d %d %d",n/2,n/4,n/4);
else printf("2 %d %d",n/2-1,n/2-1);
return puts(""),0;
}
本文来自博客园,作者:caijianhong,转载请注明原文链接:https://www.cnblogs.com/caijianhong/p/Solution-cf1497c1.html