Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <iostream>
- #include <set>
- #include <map>
- #include <vector>
- #include <string>
- #include <cstring>
- #include <algorithm>
- #include <memory.h>
- #include <utility>
- #include <cmath>
- #include <cassert>
- using namespace std;
- #define forn( i,n ) for ( int i=0; i<(int)(n); i++ )
- #define pb push_back
- #define mp make_pair
- #define sz(a) (int)((a).size())
- typedef long long ll;
- typedef long double ld;
- typedef pair<int,int> pii;
- struct deg {
- int k,a,x;
- } a[500000];
- int i,j,n,m,l,r,h,x,s,R[5000000][4];
- bool cmp(deg ai, deg aj) {
- if (ai.k!=aj.k) return ai.k<aj.k;
- if (ai.a!=aj.a) return ai.a<aj.a;
- return ai.x<aj.x;
- }
- int main()
- {
- scanf("%d",&n);
- for (i=2; i*i<=n; i++) {
- ll z=i*i;
- for (j=2; z<=n; j++) {
- a[m].k=int(z);
- a[m].a=i;
- a[m++].x=j;
- z*=i;
- }
- }
- sort(a,a+m,cmp);
- // for (i=0; i<m; i++) printf("%d: %d %d (%d)\n",i,a[i].a,a[i].x,a[i].k);
- for (i=0; i<m; i++) {
- x=n-a[i].k; l=0; r=i;
- while (l<r) {
- h=(l+r)/2;
- if (a[h].k<x) l=h+1; else r=h;
- }
- for (j=r; j<=i && a[j].k==x && (a[j].a<a[i].a || (a[j].a==a[i].a && a[j].x<=a[i].x)); j++) {
- R[s][0]=a[i].a; R[s][1]=a[i].x;
- R[s][2]=a[j].a; R[s][3]=a[j].x; s++;
- }
- }
- printf("%d\n",s);
- for (i=0; i<s; i++) printf("%d %d %d %d\n",R[i][0],R[i][1],R[i][2],R[i][3]);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement