longSumDivisors, long returnMercenneNumber
#include <stdio.h>
void printLineBreak();
void printLineSpace();
void printInteger(int intNum);
void printLong(long lngNum);
void printFloat(float fltNum);
void printStringRec(char *t);
void printTrueOrFalse(int myInt);
#define MYMAXP 7
long sumDivisors(long number){
long sum = 0;
long i=0;
for(i = 2; i*i < number; i++)
{
if ((number % i) == 0) {
sum = sum + i + (number/i);
}
}
if (i*i == number ) sum += i;
return sum+1;
}
int perfectTest(long number){
if(sumDivisors(number) == number){
return 1;
}
return 0;
}
long returnMercenneNumber(double p){
long M1 = pow(2, p-1);
long M2 = pow(2, p)-1;
return M1*M2;
}
//=================================================
int main(){
long perfectCandidate = 0;
long p = 0;
int counter = 0;
int maxP = MYMAXP;
printf("Sequence of %d perfect numbers and their Mercenne prime exponents: \n", maxP);
for (p = 2; counter < MYMAXP; p++){
perfectCandidate = returnMercenneNumber(p);
if (perfectTest(perfectCandidate)!=0){
printLong(perfectCandidate);
printLineSpace();
printInteger(p);
printLineBreak();
counter++;
}
}
return 0;
}
//Print line break
void printLineBreak() {
char myEnd[] = "\n";
printf (myEnd);
}
//Print space
void printLineSpace() {
char myEnd[] = " ";
printf (myEnd);
}
//Print any string
void printStringRec(char *t) {
if (*t == '\0')
return;
printf("%c", *t);
printStringRec(++t);
}
//Print any integer
void printInteger(int intNum){
printf("%d ", intNum);
}
//Print any long
void printLong(long lngNum){
printf("%ld ", lngNum);
}
//Print any float
void printFloat(float fltNum){
printf("%.2f ", fltNum);
}
//Print any double
void printDouble(double fltNum){
printf("%.2f ", fltNum);
}
//Print Boolean from 1 or 0
void printTrueOrFalse(int myInt){
switch (myInt){
case 1:
printf("%s", "TRUE");
break;
case 0:
printf("%s", "FALSE");
break;
default:
printf("%s", "BOOL UNKNOWN");
break;
}
}