Ŀ                                                 Ŀ
 PrimeNumbers.cpp                                                   prime_numbers.cpp 
                                                 

#include <stdio.h>                                                   #include <stdio.h>
#include <stdlib.h>                                                  #include <stdlib.h>
#include <functional>                                                #include <functional>
#include <typeinfo>                                                  #include <typeinfo>

#define WR /*WR*/                                                    #define WR /*WR*/
#define RC /*RC*/                                                    #define RC /*RC*/

#define export using                                                 #define export using
#define sealed /*sealed*/                                            #define sealed /*sealed*/

#define free delete                                                  #define free delete
#define with std::function                                           #define with std::function
typedef void * PSTRUCT;                                              typedef void struct_ptr;

#define size_of(x) ( sizeof (x) )                                    #define size_of(x) ( sizeof (x) )
#define array_size(x) ( sizeof (x) )                                 #define array_size(x) ( sizeof (x) )
#define array_length(x) ( sizeof (x) / sizeof (x[0]) )               #define array_length(x) ( sizeof (x) / sizeof (x[0]) )

#define t_id(x) ( typeid (x).hash_code () )                          #define t_id(x) ( typeid (x).hash_code () )
#define t_name(x) ( typeid (x).name () )                             #define t_name(x) ( typeid (x).name () )

typedef unsigned char BYTE;                                          typedef unsigned char byte;
typedef unsigned long ULONG;                                         typedef unsigned long ulong;
typedef char * PCHAR;
typedef char CHAR;
typedef void VOID;
typedef int INT;

#define Main main

/* * */                                                              /* * */

sealed namespace Numbers                                             sealed namespace numbers
{                                                                    {
  BYTE NumberIsPrime (INT N)                                           byte number_is_prime (int n)
  {                                                                    {
    BYTE WR Number_is_prime = 1;                                         byte WR number_is_prime = 1;

    for (INT Number = 2; Number < N; Number ++)                          for (int number = 2; number < n; number ++)
    {                                                                    {
      if (N % Number == 0)                                                 if (n % number == 0)
      {                                                                    {
        Number_is_prime = 0; break;                                          number_is_prime = 0; break;
      }                                                                    }
    }                                                                    }

    return Number_is_prime;                                              return number_is_prime;
  }                                                                    }

  VOID PrimeNumbers (INT N, with <VOID (INT)> ReportPrime)             void prime_numbers (int n, with <void (int)> report_prime)
  {                                                                    {
    for (INT I = 0; I < N; I ++)                                         for (int i = 0; i < n; i ++)
    {                                                                    {
      if (NumberIsPrime (I))                                               if (number_is_prime (i))
      {                                                                    {
        ReportPrime (I);                                                     report_prime (i);
      }                                                                    }
    }                                                                    }
  }                                                                    }
}                                                                    }

export Numbers::PrimeNumbers;                                        export numbers::prime_numbers;


                                                                     
                                                                     
                                                                     


INT Main (INT Arg_c, PCHAR Arg_v[])                                  int main (int arg_c, char *arg_v[])
{                                                                    {
  if (Arg_c != 2)                                                      if (arg_c != 2)
  {                                                                    {
    printf ("Usage: %s%s\n", Arg_v[0], " N");                            printf ("Usage: %s%s\n", arg_v[0], " N");
  }                                                                    }
  else                                                                 else
  {                                                                    {
    printf ("== Prime Numbers ==\n");                                    printf ("== Prime Numbers ==\n");

    PrimeNumbers (strtod (Arg_v[1], NULL), [] (INT N) {                  prime_numbers (strtod (arg_v[1], NULL), [] (int n) {
      printf ("%d\n", N);                                                  printf ("%d\n", n);
    });                                                                  });
  }                                                                    }

  return 0;                                                            return 0;
}                                                                    }
