R代码为(a ^ 2 + b ^ 2 = c ^ 2)< 1000(毕达哥拉斯)

时间:2014-08-17 08:28:45

标签: r

毕达哥拉斯三元组是三个正整数a,b和c,其中^ 2 + b ^ 2 = c ^ 2。 需要使用R来列出所有可能的三元组,其中b和c小于1000并且< b< C。 无法使用控制流构造(if,for,while和repeat) 应该有881个三元组。 谢谢:))

vals <- expand.grid(x=seq(1000), y=seq(1000))
subset(vals, x^2 + y^2.....)

不确定从哪里开始

1 个答案:

答案 0 :(得分:1)

# create a data.frame with all possible combos
vals <- expand.grid( x = 1:1000 , y = 1:1000 )

# calculate the z for each of these
vals$z <- sqrt( vals$x^2 + vals$y^2 )

# subset all possible combinations where z is an integer and x, y, z are <= 1000 and x < y and y < z
actuals <- subset( vals , z == round( z ) & ( x <= 1000 ) & ( y <= 1000 ) & ( z <= 1000 ) & ( x < y ) & ( y < z ) )

# answer
nrow( actuals )

# look at the first six records
head( actuals )

# plot x and y
plot( actuals$x , actuals$y )