题解 [ARC165A] Sum equals LCM

发布时间 2023-09-19 07:44:44作者: reclusive2007

前天的晚上打这道题,和同学一起想出了思路,开心。


题意描述

给你一个数 \(N\),问你存不存在一个数列 \(A_1,A_2,\ldots,A_n(2 \le n)\) ,使得 \(\sum_{i=1}^n A_i=N\) 并且 \(\operatorname{lcm}(A_1,A_2,\ldots,A_n)=N\)

具体思路

首先显然,一个质数 \(N\) 的因数只有 \(1\)\(N\)

若选 \(N\),那么个数不符合要求,

若选 \(1\)\(N\),那么和比 \(N\) 大,不符合要求。

因此质数肯定是不符合要求的。

考虑不是质数的情况。

我们从样例出发, \(6=2 \times 3\),因此我们令 \(A_1=2,A_2=3\)

但是我们发现和并不符合要求,而同时发现给数列中添加 \(1\) 并不会影响最后的最小公倍数。

因此我们令 \(A_3=1\) 即可。

想到这里你好像懂了什么,继续往下看。

样例中还有一个 \(4\),它是不符合要求的,为什么?

由于我们可以通过补 \(1\) 的方式来保证和为 \(N\),因此可以不用考虑和。

我们对 \(4\) 进行质因数分解,发现它只有 \(2\) 这一个质因子。

说明我们如果把它和 \(6\) 一样分成两个数相乘,由于它只有 \(2\) 这一个质因子,那么这两个数一定同时可以被 \(2\) 整除。

设这两个数分别为 \(a,b\),其中 \(a \times b=4\)

那么 \(\operatorname{lcm}(a,b)=\frac{a \times b}{\gcd(a,b)}=\frac{a \times b}{2}=\frac{4}{2}=2\)

我们发现最后答案不是 \(4\)

一般的 \(N=p^c\),有 \(\operatorname{lcm}(a,b)=\frac{a \times b}{\gcd(a,b)}=\frac{a \times b}{p}=\frac{N}{p}\)

于是我们得出结论

  • \(N\) 为质数,没有符合条件的数列。

  • \(N\) 不为质数且只有一个质因子,没有符合条件的数列。

  • \(N\) 不为质数且质因子个数 \(>1\),有符合条件的数列。

Code

#include<bits/stdc++.h>
using namespace std;
int main(){
	int t;scanf("%d",&t);
	while(t--){
		int n;scanf("%d",&n);
		int cnt=0;
		for(int i=2;i*i<=n;i++){
			if(n%i==0){
				cnt++;
				while(n%i==0)n/=i;
			}
		}
		if(n>1)cnt++;
		if(cnt>1)puts("Yes");
		else puts("No");
	}
	return 0;
}