CF1617B GCD Problem
最开始以为是计数问题,卡了好久(
话说这道题出成计数不失为一道好题主要是我不会。
一个很显然的思路。
题目大意
给定一个正整数 \(n\),请找出一组互不相同的正整数 \(a,b,c\),使得:
- \(a+b+c=n\)。
- \(\gcd(a,b)=c\)。
其中 \(\gcd(x,y)\) 表示 \(x\) 和 \(y\) 的最大公因数。
题目分析
令 \(c=1\),有 \(\gcd(a,b)=1\),即 \(a,b\) 互质。
分类讨论一波咯:
-
\(n\) 为偶数时,\(\dfrac{n}{2}\) 为整数,所以有 \(a=\dfrac{n}{2}-1,b=\dfrac{n}{2}\)。
-
\(n\) 为奇数时:
若 \(n-1\) 为 \(4\) 的倍数时,需要满足 \(\gcd(a,b)=1\),有 \(a=\dfrac{n-1}{2}-1,b=\dfrac{n-1}{2}+1\)。
若 \(n-1\) 非 \(4\) 的倍数时,有 \(a=\dfrac{n-1}{2}-2,b=\dfrac{n-1}{2}+2\)。
然后这道题就做完了。
代码
\(\frak{Main~Code:}\)
inline void solve()
{
n=read();
if(n%2==0)
{
a=n/2-1,b=n/2,c=1;
}
else
{
if((n-1)%4==0)
{
a=(n-1)/2-1,b=(n-1)/2+1,c=1;
}
else
{
a=(n-1)/2-2,b=(n-1)/2+2,c=1;
}
}
printf("%d %d %d\n",a,b,c);
}