我编写了一个程序来查找 100 到 1000 之间的毕达哥拉斯三元组。下面是相同的代码。
#include<iostream>
#include<cmath>
using namespace std;
bool checkWhetherInteger(int x, int y);
int getInteger(int x, int y);
int main()
{
cout << "This program is to print all pythagorean triplets from 100 to 1000. \n";
int x=100;
int y=100;
for(; x<=1000; x++)
{
for (; y<=1000; y++)
{
if (checkWhetherInteger(x,y))
{
cout << "Triplet : " << x << " " << y << " " << getInteger(x,y) << "\n";
}
}
y=100;
}
return 0;
}
bool checkWhetherInteger(int x, int y)
{
for (int i=141; i<=1415; i++)
{
if(hypot(x,y) == i )
{
return true;
}
}
}
int getInteger(int x, int y)
{
return static_cast<int>(hypot(x,y));
}
我现在面临两个问题。
主要问题是它执行缓慢。虽然它给了我所有的三元组,但它需要大约 553.7 秒来执行。那么是否有任何算法可以在 1-2 秒或更短的时间内完成我想要实现的目标。
由于两个自变量 x 和 y 我得到一个三元组两次。对此可以做些什么。
如果我做错了什么,请多多包涵。我是一个学习者。