История изменений
Исправление TomBOY, (текущая версия) :
Python 2.7.3 и там и там.
Тут проскакивала ещё мерялка:
#include <assert.h>
#include <stdlib.h>
#include <stdbool.h>
#ifdef VECTOR
#include <vector>
#endif
int main()
{
const int n = 1214739071;
int prime_count=0;
assert( sizeof(char)==1 ); /// ну мало ли...
#ifdef VECTOR
std::vector<char> is_prime(n+1);
#else
char* is_prime = (char*) malloc(n+1);
if( !is_prime ) return 1;
#endif
for( int i=2; i<=n; ++i ) is_prime[i] = true;
is_prime[0] = is_prime[1] = false;
for( int p=2; p*p<=n; ++p )
{
if( is_prime[p] )
{
for( int i=p*p; i<=n; i+=p )
{
is_prime[i] = false;
}
}
}
for( int i=0; i<20; ++i )
{
if( is_prime[i] ) printf("%d ",i);
}
for( int i=0; i<=n; ++i )
{
prime_count += is_prime[i];
}
printf( "prime_count=%d\n", prime_count );
return 0;
}
Исходная версия TomBOY, :
Python 2.7.3 и там и там.
Тут проскакивала ещё мерялка:
#include <assert.h>
#include <stdlib.h>
#include <stdbool.h>
#ifdef VECTOR
#include <vector>
#endif
int main()
{
const int n = 1214739071;
int prime_count=0;
assert( sizeof(char)==1 ); /// ну мало ли...
#ifdef VECTOR
std::vector<char> is_prime(n+1);
#else
char* is_prime = (char*) malloc(n+1);
if( !is_prime ) return 1;
#endif
for( int i=2; i<=n; ++i ) is_prime[i] = true;
is_prime[0] = is_prime[1] = false;
for( int p=2; p*p<=n; ++p )
{
if( is_prime[p] )
{
for( int i=p*p; i<=n; i+=p )
{
is_prime[i] = false;
}
}
}
for( int i=0; i<20; ++i )
{
if( is_prime[i] ) printf("%d ",i);
}
for( int i=0; i<=n; ++i )
{
prime_count += is_prime[i];
}
printf( "prime_count=%d\n", prime_count );
return 0;
}