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);
}
posted @ 2022-01-06 23:14  Coros_Trusds  阅读(60)  评论(0编辑  收藏  举报