如果我想生成唯一的(忽略負數)固定d(在這種情況下爲2^15 - 1)的畢達哥拉斯四元組(形式爲a^2 + b^2 + c^2 = d^2)還有比O(n^3)更好的方法嗎?生成具有一個固定值的畢達哥拉斯四元組?
現在我幾乎用蠻力迫使:
int r = (1 << 15) - 1;
for(int i = 0; i < r; i++)
for(int j = i; j < r; j++)
for(int k = j; k < r; k++)
if(i * i + j * j + k * k == r * r)
//add to list
這是O(n^3),有沒有更快的方法?我發現了一些可能會產生四倍的小竅門,但他們都表示他們可能會錯過一些。我看到他們的方程式,我認爲可能有一些線性方程組的方式?
通過觀察a,b和c中的1或3必須是奇數(如果d是奇數),或者如果d是偶數時恰好爲0或2,可以消除一半的搜索空間。這個技巧可能會擴展到其他小素數模。 – Patrick87