Реализации алгоритмов/Решето Сундарама: различия между версиями

Содержимое удалено Содержимое добавлено
перенесено из w:Решето Сундарама
(нет различий)

Версия от 06:21, 31 марта 2011

Haskell

 sundaram n = 2 : [2*m+1 | m <- [1..k], m `notElem` zs]
   where 
     zs = [i + j + 2*i*j | i <- [1..k`div`3], j <- [i..(k-i)`div`(2*i + 1)]]
     k  = (n-1) `div` 2

C++

void sundaram(int n){
    int *a = new int [n], i, j, k;
    memset(a, 0, sizeof(int) * n);
    for(i = 1; 3*i+1 < n; i++){
 	  for(j = 1; (k = i+j+2*i*j) < n && j <= i; j++){
 		a[k] = 1;
 	  }
    }
    for(i = 1; i < n; i++){
 	  if(a[i] == 0) cout << (2 * i + 1) << " ";
    }
    delete [] a;
 }