So, I spend so much time working and doing mathematics and walking the dogs that I don’t always spend much time on programming. But, over the last year, I have realized that everything that I need to make windows applications is already on my computer. I don’t need any fancy software: just a text editing program, and an open source compiler to compile from the command line.

So my first code that I am posting here is a C++ application for factorizing integers. It just runs in a window with no fancy GUI. But it factorizes numbers very nicely.

The link for the downloadable exe file is below the code.

#include <iostream>

#include <cmath>

#include <cstdlib>

#include <cstdint>

#include <string>

// #include <NTL/ZZ.h> get this number theory stuff eventually

```
```bool primep (int64_t N);

int main()

{

using namespace std;

std::string another ="N";

do

{

int64_t N;

int64_t divisorlist[1000];

int64_t primedivisorlist[100][3];

int64_t sumofdivisors =0;

int64_t phi=1;

int counter (1);

bool squarep (false);

cout<< "This application factors integers of up to seventeen digits."<<endl;

cout << "Enter an integer to be factored: " <<endl;

cin>>N;

cin.ignore(32767, '\n');

for (int m=1; m<= floor(sqrt(N));m++ )

{

if (N%m == 0)

{divisorlist[counter]=m;

counter++;}

}

for(int m=counter-1;m> 0;m--)

{

int64_t quotient = N/divisorlist[m];

if (divisorlist[m] != quotient)

{divisorlist[counter]=quotient;

counter++;

}}

// now extract primes

int bar=1;

for(int m =2; m<=counter-1;m++)

{

if (primep(divisorlist[m]))

{primedivisorlist[bar][1]=divisorlist[m];

bar++;}

}

// now find powers of primes

for (int m=1; m<=bar-1; m++)

{

int power=1;

int64_t x = round(pow(primedivisorlist[m][1], power));

while (N % x ==0

&& x<=N)

{

power++;

x = round(pow(primedivisorlist[m][1], power));

}

primedivisorlist[m][2]=power-1;

}

cout<<N<<" = ";

for(int m =1; m<=bar-1;m++)

{

cout<<primedivisorlist[m][1];

if (primedivisorlist[m][2]>1 )

cout<< "^"<< primedivisorlist[m][2];

if (m<bar-1) cout<<"*";

phi=phi*round(pow(primedivisorlist[m][1], (primedivisorlist[m][2]-1)))*(primedivisorlist[m][1]-1);

}

cout<<endl;

cout<< "Number of divisors: "<<counter-1<<endl;

cout<<"The divisors are: "<<endl;

for(int m =1; m<=counter-1;m++)

{

cout<<divisorlist[m]<<" ";

sumofdivisors = sumofdivisors+divisorlist[m];

}

cout<<endl;

cout<<"The sum of the aliquot divisors of "<<N<<" is "<<sumofdivisors-N<<". Hence, this number is ";

if (sumofdivisors >(2*N)) {cout<<"abundant. "<<endl;}

else if (sumofdivisors<(2*N)){cout<<"deficient. "<<endl;}

else {cout<<"perfect. "<<endl;}

cout<<"Phi, the number of integers less than and relatively prime to "<<N<<" is "<<phi<<endl;

cout<<N<<" is ";

if (primep (N))

cout<<" ";

else cout<<"not ";

cout<<"prime."<<endl;

squarep = (counter-1)%2;

cout<<N<<" is ";

if (squarep)

cout<<" ";

else cout<<"not ";

cout<<"a perfect square."<<endl;

cout<<"Another number? ";

std::getline(std::cin, another);

}

while ((another == "yes") || (another == "y"));

return 0;

}

bool primep (int64_t N)

`//returns t if N is prime`

{

for (int m=2; m<= floor(sqrt (N)); m++)

{

if (N%m ==0) return false;

}

return 1;

}

The code is very simple and self-explanatory. It is not the most efficient and beautiful way to factorize a number, but it works well enough within the realm of integers that can be easily handled by the base C++ variable types.

Here is the link for the exe file: