Find Prime numbers example:
// prime_example.d
/+
' Title : Fun with Prime Numbers
' Original Author : Steve Litt (c) 2004 All rights reserved.
' Original Code : http://www.troubleshooters.com/codecorn/primenumbers/primenumbers.htm
' Example : Getting Prime Numbers by using the "Array Method (Sieve of Eratosthenes)"
' -------------------------------------------------------------------------------------------
' D conversion by David 'SpottedTiger' Davis
' Sample Primes: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, ...
+/
module findprime;
private import std.stdio;
void printPrime( in uint uiPrime )
{
static uint uiy = 0U;
std.stdio.writef( "%4d, ", uiPrime );
uiy++;
if ( ( uiy % 10U ) == 0U )
{
uiy = 0U;
std.stdio.writefln();
}
} // end void printPrime( in ulong )
void findPrimes( in uint uiTopCandidate )
{
char[] sPrimeArray;
uint uiThisFactor;
uint uiLastSquare;
uint uiThisSquare;
uint uiMark;
sPrimeArray.length = uiTopCandidate + 1U;
sPrimeArray[] = true;
// Set all but 0 and 1 to Prime status
sPrimeArray[ 0 ] = 0U;
sPrimeArray[ 1 ] = 0U;
// Mark all the non-Primes
uiThisFactor = 2U;
uiLastSquare = 0U;
uiThisSquare = 0U;
while ( uiThisFactor * uiThisFactor <= uiTopCandidate )
{
// Mark the multiples of this factor
uiMark = uiThisFactor + uiThisFactor;
while( uiMark <= uiTopCandidate )
{
sPrimeArray[ uiMark ] = false;
uiMark += uiThisFactor;
}
// Print the proven Primes so far
uiThisSquare = uiThisFactor * uiThisFactor;
for ( ; uiLastSquare < uiThisSquare; uiLastSquare++ )
if( sPrimeArray[ uiLastSquare ] == true )
printPrime( uiLastSquare );
// Set ulThisFactor to the Prime
uiThisFactor++;
while ( sPrimeArray[ uiThisFactor ] == false )
uiThisFactor++;
assert( uiThisFactor <= uiTopCandidate );
}
// Print the remaining Primes
for ( ; uiLastSquare <= uiTopCandidate; uiLastSquare++ )
if( sPrimeArray[ uiLastSquare ] == true )
printPrime( uiLastSquare );
sPrimeArray.length = 0U;
} // end void findPrimes( in uint )
int main()
{
uint uiTopCandidate = 1000U;
writefln( "All the numbers listed below between 0 to 1000 are Primes!" );
findPrimes( uiTopCandidate );
return 0;
} // end int main()
C:\dmd\MKOD_ex>..\bin\dmd prime_example.d
C:\dmd\bin\..\..\dm\bin\link.exe prime_example,,,user32+kernel32/noi;
C:\dmd\MKOD_ex>prime_example
All the numbers listed below between 0 to 1000 are Primes!
2, 3, 5, 7, 11, 13, 17, 19, 23, 29,
31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
73, 79, 83, 89, 97, 101, 103, 107, 109, 113,
127, 131, 137, 139, 149, 151, 157, 163, 167, 173,
179, 181, 191, 193, 197, 199, 211, 223, 227, 229,
233, 239, 241, 251, 257, 263, 269, 271, 277, 281,
283, 293, 307, 311, 313, 317, 331, 337, 347, 349,
353, 359, 367, 373, 379, 383, 389, 397, 401, 409,
419, 421, 431, 433, 439, 443, 449, 457, 461, 463,
467, 479, 487, 491, 499, 503, 509, 521, 523, 541,
547, 557, 563, 569, 571, 577, 587, 593, 599, 601,
607, 613, 617, 619, 631, 641, 643, 647, 653, 659,
661, 673, 677, 683, 691, 701, 709, 719, 727, 733,
739, 743, 751, 757, 761, 769, 773, 787, 797, 809,
811, 821, 823, 827, 829, 839, 853, 857, 859, 863,
877, 881, 883, 887, 907, 911, 919, 929, 937, 941,
947, 953, 967, 971, 977, 983, 991, 997,
C:\dmd\MKOD_ex>