一個畢達哥拉斯三元組是三個自然數(shù)的集合, a < b < c, 其中,
a2 + b2 = c2
比如, 3^2 + 4^2 = 9 + 16 = 25 = 5^2.
只存在一個畢達哥拉斯三元組 ,其中a + b + c = 1000.
求abc的積
分析:
a+b+c=1000
=> (a+b+c)^2 = 10^6
=>a2+b2+c^2+2(ab+ac+bc) = 10^6
又因為a2 + b2 = c2
=>2(c2+ab+ac+bc)=106
=> 2( (c+a+b)c+ab )=10^6
=>2(1000c+ab)=10^6
=>c = ((10^6 /2)- ab)/1000
代入a+b+c=1000得
((10^6 /2)- ab)/1000+a+b=1000
=> 1000(a+b)=500000+ab -----------等式A
算法應該在[1,999]內(nèi)遍歷滿足等式A的a和b
另外,等式兩邊同時除以1000后 勘高,
由于左邊的a+b是整數(shù)簿盅,右邊ab/1000必然也是整數(shù)
ab/1000=n =>ab = 1000n
所以a和b的尾數(shù)不可能是1 3 7 9,同時兩個數(shù)的尾數(shù)不可能都為5,
所以可以統(tǒng)一假設a的尾數(shù)不可能是1 3 5 7 9,也就是a是偶數(shù)
又因為 a<b且a+b+c=1000,所以a+b<1000,即a<500
從等式A又能看出a+b>500,即b>500-a
answer = a*b*(1000-a-b)
where (a,b) = head [(a,b) | a<-[2,4..498],b<-[500-a+1..1000-a],a*b `mod` 1000 ==0,1000*(a+b)==500000+a*b ]
31875000