搬运我的洛谷题解,原文创作时间:2026-03-09 20:49。
思路:
只需要求数组中所有数的最大公约数再判断一下即可。
题目说可能有多种解,只需要输出其中一种即可。所以如果发现输出和样例不一样,如果思路正确也是可以正确的。
如果最大公约数大于 $1$,则只需要操作一次,$m$ 等于最大公约数,$k$ 等于 $1$,因为每个数都是 $m$ 的倍数。
若最大公约数等于 $1$,则两次操作即可。第一次取 $m$ 等于 $4$,$k$ 等于 $2$,将所有奇数变为 $2$,偶数变为 $0$。第二次 $m$ 等于 $2$,$k$ 等于 $1$,将 $2$ 都变为 $0$。
代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int a[100000];
for(int i=0;i<n;i++) cin>>a[i];
int g=a[0];
for(int i=1;i<n;i++) g=__gcd(g,a[i]);
if(g>1){
cout<<"1\n"<<g<<" 1";
}
else{
cout<<"2\n4 2\n2 1";
}
return 0;
}