假设示例:有一个数字,我将把它分成 x 个部分(较小的数字,在示例中看到的范围内)。
我需要一种方法,最好是 Linux Bash 的一行程序,将一个大数字拆分为不相等的较小数字,例如:
54773147129 / 11 = 11702658340 4215060707 8649154648 8166383273 7721726143 6316805625 5074147699 11938331015 7290181592 10452629111 12235301352
24335474529 / 5 = 3782894329 7991597003 2435897896 6966444910 3158640391
120358276480 / 9 = 15276312867 11090117156 8997563892 15321924738 10203261894 21007930376 17164309215 13595762399 7701093943
54773147129 / 8 = 10222423691 6997800027 4434683169 5675683553 1121059020 8522036904 4023455184 13776005581
等等。
更详细地考虑第一个例子:
号码是 54773147129,我想要 11 个零件
我不想简单地将数字除以 11,这将导致 11 个相等但非整数的分数,即
不是
54773147129 / 11 = 4979377011,73
一般来说,我不希望有小数部分。
我不想将数字分成 10 个相等的部分和一个包含整数除法模数的较大部分,即
不是
4979377011
4979377011
4979377011
4979377011
4979377011
4979377011
4979377011
4979377011
4979377011
4979377011
4979377019
我想要得到如下结果:
11702658340
4215060707
8649154648
8166383273
7721726143
6316805625
5074147699
11938331015
7290181592
10452629111
12235301352
如何在 Bash 中做到这一点(最好用一行代码)?
可能是这样的:
或者用空格分隔的方式在一行上打印它们,而不是每行一个:
请注意,不能保证数字全部不同或均匀分布。
如果数字必须是正整数并且全部不同,则无论 x < n*(n-1)/2 是什么情况,都不可能出现任何结果。
请注意,在大多数
awk
实现中(现在这是 POSIX 的要求),srand()
s
伪rand
om 数字生成器都需要具有 Unix 纪元时间的整数值,因此如果在同一秒内运行该命令两次,您将得到相同的结果。