eboolean Ответов: 2

Преобразование Python в C или C++


def asallar(limit):
   limitn = limit+1
   asal_degil = [False] * limitn
   asal_listesi = []
 
   for i in range(2, limitn):
       if asal_degil[i]:
           continue
       for f in xrange(i*2, limitn, i):
           asal_degil[f] = True
       asal_listesi.append(i)
 
   return asal_listesi


a = asallar(1000000)
print a[9999]


timeit asallar(1000000)

2 Ответов

Рейтинг:
1

CPallini

#include <iostream>
using namespace std;

vector <int>  asallar(size_t limit)
{
  vector <bool> nov(limit+1, false);
  vector <int> result;
  for (size_t i=2; i<=limit; ++i)
  {
    if ( nov[i] ) continue;
    for (size_t f = i*2; f<=limit; f+=i)
    {
      nov[f] = true;
    }
    result.push_back(i);
  }
  return result;
}

int main()
{
  auto v = asallar(1000000);
}


Синхронизация:
Python program: about 300 ms
C++ program:    about 100 ms

Пожалуйста, обратите внимание: если a vector<int> (вместо vector<bool>) используется в C++ программа, то скорость выполнения удваивается.


Afzaal Ahmad Zeeshan

5ед.

CPallini

Спасибо.

Рейтинг:
0

BacchusBeale

Для C, что-то вроде в комментариях:

def asallar(limit): \\ void asallar(int limit, int* asal_listesi){
   limitn = limit+1 \\ int limitn =limit+1;
   asal_degil = [False] * limitn \\ int *asal_degil = malloc(...)
   asal_listesi = [] \\ vector asal_listesi; 
 
   for i in range(2, limitn): \\ for(int i=2; i<limitn;>       if asal_degil[i]: \\ if(asal_degil[i])
           continue       \\ continue;
       for f in xrange(i*2, limitn, i): \\ etc
           asal_degil[f] = True
       asal_listesi.append(i)
 
   return asal_listesi