Городской леший, вот. "Шедевр" написан за пол-часа, поэтому просьба ногами не бить :
Язык C++, компилировал g++ под Linux на разных 32 и 64 разрядных платформах. Тесты запускались в консоли, все ресурсоёмкие приложения были вырублены. Серьёзной разницы в производительности (по тесту) между многопользовательским и монопольным режимом не замечено.
Код:
#include <deque>
#include <stdio.h>
#include <math.h>
#include <time.h>
using namespace std;
int res;
#define MAX_VAL 4000000
int array1[MAX_VAL];
int array2[MAX_VAL];
int a, b, c, d, e;
float fa, fb, fc, fd, fe;
// Алгоритм: начинаем с числа 2. Выводим текущее число, "вычеркиваем" числа, кратные текущему, ищем следующее невычеркнутое число.
int eratosfen (void)
{
int min_val = 2, max_val = 999999;
// Поиск простых ведем до корня из max_val
   int sqrt_max_val = (int)sqrt((double)max_val);
   
// Признаки "вычеркнутости" чисел (элементы 0 и 1 не используются)
   deque<bool> flags (max_val+1, false);  // первоначально все числа не перечеркнуты
   int current_value (2);
   
   do
   {
//      if (current_value >= min_val)
//         printf("%d\n", current_value);
         
      // Вычеркиваем все числа, кратные current_value, начиная с его квадрата
      for (int i = current_value * current_value; i <= max_val; i += current_value)
      flags[i] = true;
      
      // Ищем следующее невычеркнутое число
      for (++current_value; current_value <= sqrt_max_val && flags[current_value]; ++current_value) ;
      
   } while (current_value <= sqrt_max_val);
   
   // Выведем все невычеркнутые числа больше корня из N, при этом не рассматриваем числа менее min_val
   for (current_value = min_val > sqrt_max_val+1 ? min_val : sqrt_max_val+1; current_value <= max_val; ++current_value)
   
      if (!flags[current_value])
         res = current_value;
   
      
//      if (!flags[current_value])
//         printf("%d\n", current_value);
   return 0;
}
void test_add( int n )
{
int i,j;
  a = 1;
  b = 2;
  c = 3;
  d = 4;
  e = 5;
  for( i = 0; i < n; i++ )
  {
     for( j = 0; j < 1000000; j++ )
     {
      c = a + b + i;
      c = c + i;
      c = c + a;
      c = c + b;
      c = c + d;
      c = c + e;
      a = a + i;
      b = a + i + b;
      d = c + e;
      e = d + a;
     }
     
  }
}
void test_sub( int n )
{
int i,j;
  a = 1;
  b = 2;
  c = 3;
  d = 4;
  e = 5;
  for( i = 0; i < n; i++ )
  {
     for( j = 0; j < 1000000; j++ )
     {
      c = a - b - i;
      c = c - i;
      c = c - a;
      c = c - b;
      c = c - d;
      c = c - e;
      a = a - i;
      b = a - i - b;
      d = c - e;
      e = d - a;
     }
     
  }
}
void test_mul( int n )
{
int i,j;
  a = 1;
  b = 2;
  c = 3;
  d = 4;
  e = 5;
  for( i = 0; i < n; i++ )
  {
     for( j = 0; j < 1000000; j++ )
     {
      c = a * b * i;
      c = c * i;
      c = c * a;
      c = c * b;
      c = c * d;
      c = c * e;
      a = a * i;
      b = a * i * b;
      d = c * e;
      e = d * a;
     }
     
  }
}
void test_fmul( int n )
{
int i,j;
  fa = 1.1;
  fb = 2.1;
  fc = 3.2;
  fd = 4.3;
  fe = 5.4;
  for( i = 0; i < n; i++ )
  {
     for( j = 0; j < 1000000; j++ )
     {
      fc = fa * fb * i;
      fc = fc * i;
      fc = fc * fa;
      fc = fc * fb;
      fc = fc * fd;
      fc = fc * fe;
      fa = fa * i;
      fb = fa * i * fb;
      fd = fc * fe;
      fe = fd * fa;
     }
     
  }
}
void test_copy( int n )
{
int i,j;
  for( i = 0; i < n; i++ )
  {
     for( j = 0; j < MAX_VAL; j++ )
     {
      array1[j] = i;
     }
     for( j = 0; j < MAX_VAL; j++ )
     {
      array2[j] = j;
     }
     
     
     for( j = 0; j < MAX_VAL; j++ )
     {
      array1[j] = array2[j];
     }
     
  }
}
int main( void )
{
int i;
clock_t t1, t2;
   for( i = 0; i < MAX_VAL; i++ )
   {  
     array1[i] = clock() + i;
     array2[i] = array1[i] * clock() + i;
   }
   t1 = clock();    for( i = 0; i < 20; i++ ) eratosfen();    t2 = clock();    printf("eratosfen: %2.3f sec\n", (float)(t2 - t1)/(float)CLOCKS_PER_SEC);
   t1 = clock();    test_add(100);    t2 = clock();                            printf("add      : %2.3f sec\n", (float)(t2 - t1)/(float)CLOCKS_PER_SEC);
   t1 = clock();    test_sub(100);    t2 = clock();                            printf("sub      : %2.3f sec\n", (float)(t2 - t1)/(float)CLOCKS_PER_SEC);
   t1 = clock();    test_mul(50);     t2 = clock();                            printf("mul      : %2.3f sec\n", (float)(t2 - t1)/(float)CLOCKS_PER_SEC);
   t1 = clock();    test_fmul(50);     t2 = clock();                        printf("fmul     : %2.3f sec\n", (float)(t2 - t1)/(float)CLOCKS_PER_SEC);
   t1 = clock();    test_copy(10);     t2 = clock();                        printf("copy     : %2.3f sec\n", (float)(t2 - t1)/(float)CLOCKS_PER_SEC);
}