2012-03-08 68 views
1

我想要一个描述一组整数的数学表达式。 这组整数应符合以下内容。用某些位的整数生成一个集合

假设我有10位。我想要生成所有由例如位0,1,2,3,8,9,10组成的整数。因此,例如该组应该包含例如:

  • 0,因为0 * 2 1,因为1 * 2^2^0^2^0^2^2 + 0 * 2^3 + 0 * 2^8 + 0 * 2^9 + 0 * 2^10 = 0
  • 1, 0 + 0 * 2^1 + 0 * 2^2 + 0 * 2^3 + 0 * 2^8 + 0 * 2^9 + 0 * 2^10 = 1
  • 2,因为0 * 2^0 + 1 * 2^1 + 0 * 2^2 + 0 * 2^3 + 0 * 2^8 + 0 * 2^9 + 0 * 2^10 = 2
  • ...
  • 259,因为1 * 2^0 + 1 * 2^1 + 0 * 2^2 + 0 * 2^3 + 1 * 2^8 + 0 * 2^9 + 0 * 2^10 = 259
  • ...

所以这个集的大小将是2^7 = 128个元件,因为我们有7相关位。

数学表达式应该看起来有点像:{n:Nat | N> = 0 & &ň< 2^11 & & ......(做相关位的东西)...}

FYI我需要生成一个名为MCRL2语言自然数的集合。 http://www.mcrl2.org/mcrl2/wiki/index.php/Home

+0

这是一个功课题吗? – 2012-03-08 15:59:40

+0

是的这是一个家庭作业问题。 – meijuh 2012-03-08 16:27:11

回答

1

在C,这将是:

int bits[] = {0,1,2,3,8,9,10}; 
const int length = sizeof(bits)/sizeof(int); 
const int setSize = 1<<length; 
int set[setSize] = {0}; 

for(int i=0; i<setSize; i++) { 
    for(int j=0; j<length; j++) 
     if(i&1<<j) set[i]+=1<<bits[j]; 
} 

这取决于事情的编译时间常数,这是没有,你可能需要稍作修改。

相关问题