pvitkovsky
2/3/2018 - 2:45 AM

perfect_number_check

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;
	}
}