2012-03-08 43 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]; 
} 

這取決於事情的編譯時間常數,這是沒有,你可能需要稍作修改。

相關問題