#include <bits/stdc++.h>
using namespace std;
#define all(x) begin(x),end(x)
#define pb push_back
#define st first
#define nd second
typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
const int INF = 2e9;
const ll LLINF = 2e18;
struct op
{
int t;
int x,y;
};
bool isPrime(int k)
{
if(k==1)
return false;
for(int d=2; d*d<=k; ++d)
if(k%d==0)
return false;
return true;
}
void solve()
{
int n,s;
cin>>n>>s;
vi v(s);
for(int& x:v)
cin>>x;
if(s==1 && 2*v[0]>n)
{
cout<<1<<endl<<2<<" "<<v[0]<<" "<<1<<endl;
return;
}
vi primes;
for(int k=1; k<=n; ++k)
if(isPrime(k))
primes.pb(k);
vector<op> ops;
ops.reserve(2*n);
vi singletons;
singletons.reserve(n);
vi negated(n+1,-1);
for(int i:v)
{
vi ban;
for(int p:primes)
{
int j=p*i;
if(j>n)
break;
ban.pb(j);
if(negated[j]==-1)
{
ops.pb({3,j,0});
negated[j]=n+ops.size();
}
}
if(ban.size()>0)
{
ops.pb({2,i,negated[ban[0]]});
for(int j=1; j<ban.size(); ++j)
ops.pb({2,n+ops.size(),negated[ban[j]]});
singletons.pb(n+ops.size());
}
else
singletons.pb(i);
}
if(v.size()>1)
{
ops.pb({1,singletons[0],singletons[1]});
for(int i=2; i<v.size(); ++i)
ops.pb({1,n+ops.size(),singletons[i]});
}
cout<<ops.size()<<"\n";
for(op o:ops)
{
cout<<o.t<<" "<<o.x;
if(o.t!=3)
cout<<" "<<o.y;
cout<<"\n";
}
}
int main()
{
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int z=1;
//cin>>z;
while(z--)
solve();
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | #include <bits/stdc++.h> using namespace std; #define all(x) begin(x),end(x) #define pb push_back #define st first #define nd second typedef long long ll; typedef vector<int> vi; typedef vector<ll> vll; typedef pair<int,int> pii; typedef pair<ll,ll> pll; const int INF = 2e9; const ll LLINF = 2e18; struct op { int t; int x,y; }; bool isPrime(int k) { if(k==1) return false; for(int d=2; d*d<=k; ++d) if(k%d==0) return false; return true; } void solve() { int n,s; cin>>n>>s; vi v(s); for(int& x:v) cin>>x; if(s==1 && 2*v[0]>n) { cout<<1<<endl<<2<<" "<<v[0]<<" "<<1<<endl; return; } vi primes; for(int k=1; k<=n; ++k) if(isPrime(k)) primes.pb(k); vector<op> ops; ops.reserve(2*n); vi singletons; singletons.reserve(n); vi negated(n+1,-1); for(int i:v) { vi ban; for(int p:primes) { int j=p*i; if(j>n) break; ban.pb(j); if(negated[j]==-1) { ops.pb({3,j,0}); negated[j]=n+ops.size(); } } if(ban.size()>0) { ops.pb({2,i,negated[ban[0]]}); for(int j=1; j<ban.size(); ++j) ops.pb({2,n+ops.size(),negated[ban[j]]}); singletons.pb(n+ops.size()); } else singletons.pb(i); } if(v.size()>1) { ops.pb({1,singletons[0],singletons[1]}); for(int i=2; i<v.size(); ++i) ops.pb({1,n+ops.size(),singletons[i]}); } cout<<ops.size()<<"\n"; for(op o:ops) { cout<<o.t<<" "<<o.x; if(o.t!=3) cout<<" "<<o.y; cout<<"\n"; } } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int z=1; //cin>>z; while(z--) solve(); return 0; } |
English