答案:A、B、C、D。
本题中,函数rand_k会随机返回一个[1, k]之间的随机数(k>=2),并且每个整数出现的概率相等,对于rand_x(x<7),可以采取直接截断的方式,即只要rand函数生成的随机数大于x,则直接忽略,重新取值,直到取到小于等于x的数字返回,这样可以保证rand_x能够做到等概率产生随机数。所以,选项A正确。对于rand_x(x>7),可以采用7×rand_7+rand_7的方式等概率生成,由于rand_7函数产生的随机数的范围为[1, 7],所以7×rand_7+rand_7表达式的范围为[8, 56],即可以得到1/49等概率的8~56,只要在产生的时候-7,就可以得到等概率1/49的1~49。当要产生rand_21时,只需要把rand_49截断成rand_42,统一除以2即可。因此,选项B正确。同理可知,选项C与选项D正确。
所以,本题的答案为A、B、C和D。