1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
#include "options.h"
#include "unitnumber.h"
#include "number.h"
#include <bu/sio.h>
#include <stdlib.h>
Options::Options( int argc, char *argv[] )
{
addOption( Bu::slot(this, &Options::selfTest), "self-test",
"Run a series of tests to ensure everything is working correctly.");
addOption( Bu::slot(this, &Options::textPrimes), "text-primes",
"Generate primes in base 36 that only have digits > 9 in them.");
addHelpOption('h', "help", "This help");
parse( argc, argv );
}
Options::~Options()
{
}
int Options::selfTest( Bu::StringArray )
{
UnitNumber().run();
exit( 0 );
return 0;
}
bool hasDigits( const Bu::String &s )
{
for( Bu::String::const_iterator i = s.begin(); i; i++ )
{
if( *i >= '0' && *i <= '9' )
return true;
}
return false;
}
int Options::textPrimes( Bu::StringArray )
{
Number tst( 0, 36 );
Number max( 0, 36 );
Number j( 0, 36 );
Number one( 0, 36 );
Number fact( 0, 36 );
one = "1";
fact = "2";
for( tst = "1";; tst = tst + one )
{
if( hasDigits( tst.toString() ) )
continue;
max = tst / fact;
bool bPrime = true;
for( j = "2"; j < max; j = j + one )
{
if( (tst%j).isZero() )
{
bPrime = false;
break;
}
}
if( bPrime )
{
Bu::println("%1").arg( tst );
}
}
exit( 0 );
return 0;
}
|