a² + b² = c² となる整数a,b,cを順番に求めよ
http://mathtrain.jp/wp-content/uploads/2015/02/pythagoras-300x265.png
[3, 4, 5] , etc.
クリックするたびに次の解を印刷するプログラムはどう書けばいい?
code:triangle.js
function check(x,y,z){
if(gcd(gcd(x,y),z) != 1) return false // 6, 8, 10 みたいなのを排除
return x * x + y * y == z * z
}
function gcd(x,y){ // 最大公約数
return(x == y ? x : x > y ? gcd(x-y, y) : gcd(y-x, x))
}
function* generator(){
for(total=1;;total++){ // 1,1,1, 1,1,2, ... という具合に全部数え上げる for(x=1;x<total;x++){
total2 = total - x
if(total2 < x) break
for(y=x;y<total;y++){
total3 = total2 - y
if(total3 < y) break
z = total3
yield x,y,z // ここで止まり、 別のところでnext()が呼ばれると再開 }
}
}
}
function setup(){
$('<h2>').text('クリックすると解が表示されます').appendTo($('body'))
createCanvas(300,100)
background('#ff8')
gen = generator()
}
function mouseClicked(){ // クリックすると次々と値を表示する
do {
value = gen.next().value
} while(! check(value0,value1,value2)) //clear()
background('#ff8')
text(value.join(' '), 30, 40)
}