搬运我的洛谷题解,原文创作时间: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; 
}