极简版(输出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;
}