#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; } |