生成具有唯一数字的对称表

  • 本文关键字:对称 数字 唯一 r
  • 更新时间 :
  • 英文 :


我需要生成一个类似于以下的表:

    18  21  16  40  19  30
18      39  34  58  37  48
21          37  61  40  51
16              56  35  46
40                  59  70
19                      49
30                      

第一列和第一行中的数字是相同的数字序列,因此最终表将是对称的。我需要的是得到一个10x10的表,所有的表都有唯一的数字,这样就不会重复,因为我以后需要这些作为唯一的标识符。这更像是一个数学问题,而不是编程问题。

编辑(素数):

    2   3   5   7   11  13  17  19  23  29
2       5   7   9   13  15  19  21  25  31
3           8   10  14  16  20  22  26  32
5               12  16  18  22  24  28  34
7                   18  20  24  26  30  36
11                      24  28  30  34  40
13                          30  32  36  42
17                              36  40  46
19                                  42  48
23                                      52
29                                      

这里有一个解决方案:使向量的幂为10。

> n=10
> v=10^(1:n)
> v
 [1] 1e+01 1e+02 1e+03 1e+04 1e+05 1e+06 1e+07 1e+08 1e+09 1e+10
> m=outer(v,v,"+")
>  m[which(upper.tri(m))]
 [1]         110        1010        1100       10010       10100       11000
 [7]      100010      100100      101000      110000     1000010     1000100
[13]     1001000     1010000     1100000    10000010    10000100    10001000
[19]    10010000    10100000    11000000   100000010   100000100   100001000
[25]   100010000   100100000   101000000   110000000  1000000010  1000000100
[31]  1000001000  1000010000  1000100000  1001000000  1010000000  1100000000
[37] 10000000010 10000000100 10000001000 10000010000 10000100000 10001000000
[43] 10010000000 10100000000 11000000000
> length(unique(m[which(upper.tri(m))])
[1] 45

最新更新