首页 > 解决方案 > 如何编写一个函数来测试一个正整数 n 是否可以写为两个平方整数之和,即 n = i^2 +j^2 with i; j 2 N>0

问题描述

我一直在努力解决这个问题,但到目前为止我还没有做到。我怎么能用 R 写这段代码?

标签: rintegercontrol-flow

解决方案


f实际上你可以像下面这样构建一个用户函数

f <- function(n) {
  p <- seq(floor(sqrt(n - 1)))
  q <- sqrt(n - p**2)
  idx <- q == floor(q)
  data.frame(A = p[idx], B = q[idx])
}

这样


> f(9)
[1] A B
<0 rows> (or 0-length row.names)

> f(100)
  A B
1 6 8
2 8 6

> f(500)
   A  B
1  4 22
2 10 20
3 20 10
4 22  4

> f(1000)
   A  B
1 10 30
2 18 26
3 26 18
4 30 10

其中f(9)给出一个空数据框意味着9不能分解为两个平方整数之和。


推荐阅读