簡體   English   中英

生成無限元組

[英]Generate an infinite stream of tuples

我需要生成一個無限元組流,它滿足以下公式:

2 * a * a + b * b = c * c

我只是從Java 8開始,不確定如何實現這一點。 我有一個元組的接口:

public interface Tuple {
    /**
     * @return The value of A
     */
    int getA();

    /**
     * @return The value of B
     */
    int getB();

    /**
     * @return The value of C
     */
    int getC();
}

到目前為止,我有這種方法:

public static Stream<Tuple> generateABCTuples() {
    Supplier<Tuple> aTuple = (Supplier<Tuple>) generateABCTuples();
    Stream<Tuple> myList = Stream.generate(aTuple)
                                 .sorted();
    return myList;
}

但是,我不確定如何滿足上述方程式。 任何幫助對此表示感謝。

讓我們做一點研究(使用非負值)
2*a^2+b^2=c^2
2*a^2 = c^2 - b^2 = (cb)*(c+b)
我們可以看到b和c必須均為奇數或偶數。 無論如何,右部分可以被4整除,因此左部分也可以被4整除,並且a是偶數。 另一個條件: c >= b
讓我們

a = 2*p
u=(c-b)/2
v=(c+b)/2 [with v>=u]     

所以

b=v-u  
c=v+u
8*p^2 = 4 * u * v
2*p^2 = u * v  

現在我們可以取p的任何值,將2 * p ^ 2分解,找到可能的因子u和v,並獲得相應的a,b,c值(可能不是唯一的)。 例:

p=0  =>  u=0, v=any value, all c=b pairs are the solutions 2*0+k^2=k^2
p=1  =>  v=2, u=1  a=2 b=1 c=3   2*4+1=9  
p=2  =>  v=8, u=1  a=4 b=7 c=9   2*16+49=81  //and the second factorization:
         v=4, u=2  a=4 b=2 c=6    2*16+4=36
and so on...

當然,每個三元組元素都可能為負: a=-2 b=1 c=-3是有效的解決方案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM