-1
我寫了一個程序,以發現勾股數100 1000 之間在這裏也適用同樣的代碼。找到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我得到一個三重的兩倍。對此可以做些什麼。
如果我犯了一些錯誤,請耐心等待。我是一名學習者。
你必須運行的每個約1000倍三個嵌套循環。這使得內部代碼運行約十億次。可能需要一段時間!我想也許你可以做'double h = hypot(x,y);返回h == int(h);'使其運行速度提高1000倍。 –
工作正常!在不到3秒內執行;順便說一句你可以告訴什麼int()呢? – Vaibhav
爲什麼你不使用像國際象棋程序使用開放書籍的所有準備結果?你將在毫秒內獲得結果! (「think differnent」 - 史蒂夫喬布斯)^^ –