#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <math.h>

//#define LOOKUP_GAP 2

#define MAX_COMMON 65536
#define COMMONS 7

int main(int argc, char **argv){
	//const uint ySIZE = (1024/LOOKUP_GAP+(1024%LOOKUP_GAP>0));
	//printf("%d\n", ySIZE);

	//for(int i=0; i<1024%512; ++i)
	//	printf("%d\n", i);
	//for(int j=0; j<10; j++)
	//	printf("%d\n", j);
	
	//if(1024%3>0)
	//	printf("test\n");

	uint32_t commons[COMMONS] = {1024, 32, 40, 64, 16, 10, 4};
	double mults[MAX_COMMON][COMMONS];
	uint32_t num1 = 0;
	uint32_t num2 = 0;
	uint32_t num3 = 0;
	uint32_t found = 0;
	//double tmp1 = 0;

	while(num1<MAX_COMMON){
		for(num2=0; num2<COMMONS; num2++){
			mults[num1][num2] = (double)num1*commons[num2];
		}
		num1++;
	}
	//find least, ignore 0
	//for(num2=1; num2<COMMONS; num2++){
		

	//}

//printf("here 1 %lf\n", mults[4][0]);
	for(num1=1; num1<MAX_COMMON; num1++){
		//does this number exist in all the other commons list
		found = 0;
		for(num3=1; num3<MAX_COMMON; num3++){
			for(num2=1; num2<COMMONS; num2++){
				if(mults[num1][0] == mults[num3][num2]){
					found++;
					break;
				}
			}
			if(found == COMMONS-1)
				break;
		}

		//for(num2=1; num2<COMMONS; num2++){
		//	for(num3=1; num3<MAX_COMMON; num3++){
		//		if(mults[num1][0] == mults[num3][num2]){	
		//			found++;
		//			break;
		//		}
		//	}	
		//}
		if(found == COMMONS-1)
			break;
	}
printf("here 2\n");
	if(found == COMMONS-1){
		printf("%lf is the least common multiple of", mults[num1][0]);
		for(num1=0; num1<COMMONS; num1++){
			printf(" %u", commons[num1]);
		}

		printf("\n");
	}else
		printf("No common multiple upto %u\n", MAX_COMMON);

	return 0;
}
