Cześć wszystkim, na studiach otrzymałem zadanie aby zaprojektować schemat blokowy algorytmu w programie "Flowgorithm", 9/10 zadań zrobiłem, lecz na ostatnim poległem i od wczoraj nie wiem jak do tego podejść, zadanie brzmi następująco:
"Liczby pierwsze – generacja sitem Atkina-Bernsteina"
po 2 godzinach męczarni, zacząłem szukać w internecie i znalazłem kod c++ który odpowiada temu zadaniowi
#include <iostream>
#include <cmath>
using namespace std;
int main( )
{
unsigned int n, g, x, y, xx, yy, z, i;
bool * S;
cin >> n;
S = new bool [ n + 1 ];
for( i = 5; i <= n; i++ ) S [ i ] = false;
g = ( unsigned int ) ( sqrt ( n ) );
for( x = 1; x <= g; x++ )
{
xx = x * x;
for( y = 1; y <= g; y++ )
{
yy = y * y;
z = ( xx << 2 ) + yy;
if( ( z <= n ) && ( ( z % 12 == 1 ) || ( z % 12 == 5 ) ) ) S [ z ] = !S [ z ];
z -= xx;
if( ( z <= n ) && ( z % 12 == 7 ) ) S [ z ] = !S [ z ];
if( x > y )
{
z -= yy << 1;
if( ( z <= n ) && ( z % 12 == 11 ) ) S [ z ] = !S [ z ];
}
}
}
for( i = 5; i <= g; i++ )
if( S [ i ] )
{
xx = i * i;
z = xx;
while( z <= n )
{
S [ z ] = false;
z += xx;
}
}
cout << 2 << " " << 3 << " ";
for( i = 5; i <= n; i++ )
if( S [ i ] ) cout << i << " ";
cout << endl;
delete [ ] S;
return 0;
}
Niestety program nie rozpoznaje przesunięcia bitu o 2 znaki w lewo jako " << " lub " shl ", może ktoś ma jakiś pomysł jak to inaczej zapisać?
Myslałem już nad zastosowaniem z = (xx ^-2) + yy lecz tez nie działa