极简版(输出n组勾股数)

#include<bits/stdc++.h>
#define ul unsigned long long
using namespace std;
int n;
int main(){
	
	cin>>n;
	cout<<"3 4 5\n";
	int i=1;ul a,b;
	while(++i-n){
		a=2*i+1;
		b=2*i*(i+1);
		printf("%ld %ld %ld\n",a,b,b+1);
		if(i&1){
			int t=(i+1)/2;
			a=4*t;
			b=a*t-1;
			printf("%ld %ld %ld\n",a,b,b+2);
		}
	}
	
	return 0;
}

存储版(以n为种子输出若干组勾股数及其序号)

#include<bits/stdc++.h>
#define ul unsigned long long
using namespace std;
const int N=1e+06;
struct q{ul a,b,c;}num[N];
int tot=0,n;
bool cmp(q x,q y){return x.a<y.a;}
int main(){
	
	cin>>n;
	num[++tot].a=3;
	num[tot].b=4;
	num[tot].c=5;
	for(int i=2;i<=n;++i){
		num[++tot].a=2*i+1;
		num[tot].b=2*i*(i+1);
		num[tot].c=num[tot].b+1;
		num[++tot].a=4*i;
		num[tot].b=4*i*i-1;
		num[tot].c=num[tot].b+2;
	}
	sort(num+1,num+tot+1,cmp);
	for(int i=1;i<=tot;++i)
		printf("%d:%ld %ld %ld\n",i,num[i].a,num[i].b,num[i].c);
    
	return 0;
}