Ŀ
 prime_numbers.cpp 


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

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

#define export using /*namespaces*/
#define transitive /*export-not-required*/

#define include if constexpr /*legacy*/
#define var auto /*new-heap-var*/

#define with std::function
typedef void struct_ptr;
#define self_ptr this

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

#define free(ptr) ( delete *ptr, *ptr = NULL )

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

typedef unsigned char byte;
typedef unsigned long ulong;

/* * */

namespace numbers
{
  byte number_is_prime (int n)
  {
    byte WR number_is_prime = 1;

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

    return number_is_prime;
  }

  void prime_numbers (int n, with <void (int)> report_prime)
  {
    for (int i = 0; i < n; i ++)
    {
      if (number_is_prime (i))
      {
        report_prime (i);
      }
    }
  }
}

export numbers::prime_numbers;


 
 
 


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

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

  return 0;
}
