given up for the moment x.x
This commit is contained in:
parent
c943fdcdf7
commit
414cdf7f63
1 changed files with 89 additions and 18 deletions
97
2_2/main.c
97
2_2/main.c
|
|
@ -14,6 +14,12 @@ char input[] =
|
||||||
,'\0' // null terminator
|
,'\0' // null terminator
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef struct{
|
||||||
|
uint64_t* divs;
|
||||||
|
int count;
|
||||||
|
int pos_count;
|
||||||
|
} divisors;
|
||||||
|
|
||||||
//char input[] = "L68\nL30\nR48\nL5\nR60\nL55\nL1\nL99\nR14\nL82\n";
|
//char input[] = "L68\nL30\nR48\nL5\nR60\nL55\nL1\nL99\nR14\nL82\n";
|
||||||
int width = 0;
|
int width = 0;
|
||||||
int height = 0;
|
int height = 0;
|
||||||
|
|
@ -21,6 +27,8 @@ uint64_t result = 0;
|
||||||
uint64_t result_2 = 0;
|
uint64_t result_2 = 0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
uint64_t parseNum(char* str, int* len){
|
uint64_t parseNum(char* str, int* len){
|
||||||
int i = 0;
|
int i = 0;
|
||||||
uint64_t out = 0;
|
uint64_t out = 0;
|
||||||
|
|
@ -113,35 +121,98 @@ uint64_t sumup_gauss(uint64_t a, uint64_t b){
|
||||||
return sum_gauss(b)-sum_gauss(a-1);
|
return sum_gauss(b)-sum_gauss(a-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
int* find_divs(int num){
|
uint64_t scm(uint64_t a, uint64_t b, uint64_t limit){
|
||||||
int* divs = calloc(num, sizeof(int));
|
uint64_t res = a;
|
||||||
int count = 0;
|
while(res%b!=0){
|
||||||
for(int i = num+1; i>=2; i--){
|
res += a;
|
||||||
|
if(res>limit){
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
void gen_scms(uint64_t* divs, int* count, int* pos_count){
|
||||||
|
for(int i = 0; i<*pos_count-1; i++){
|
||||||
|
for(int o = i+1; i<*pos_count; i++){
|
||||||
|
uint64_t newdiv = scm(divs[i], divs[o], power(10, numPlaces(divs[i]*2)));
|
||||||
|
if(newdiv!=0){
|
||||||
|
printf("\t\tfound scm divisor: %lu", newdiv);
|
||||||
|
divs[*count] = newdiv;
|
||||||
|
(*count)++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
divisors* find_divs(int num){
|
||||||
|
|
||||||
|
divisors* divs = calloc(sizeof(divisors), 1);
|
||||||
|
|
||||||
|
divs->divs = calloc(num, sizeof(uint64_t));
|
||||||
|
printf("\tsearching for natural divisors\n");
|
||||||
|
for(int i = 2; i<=num; i++){
|
||||||
if(!(num%i)){
|
if(!(num%i)){
|
||||||
divs[count] = i;
|
uint64_t newdiv = gen_div(i, num/i);
|
||||||
count++;
|
printf("\t\tfound %lu natural divisor\n", newdiv);
|
||||||
|
//bool redundant = false;
|
||||||
|
//for(int i = 0; i<count; i++){
|
||||||
|
// printf("Checking against %lu\n", divs[i]);
|
||||||
|
// if(newdiv%divs[i]==0){
|
||||||
|
// redundant = true;
|
||||||
|
// printf("rejecting...\n\n");
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//if(!redundant){
|
||||||
|
// divs[count] = newdiv;
|
||||||
|
// count++;
|
||||||
|
//}
|
||||||
|
divs->divs[divs->count] = newdiv;
|
||||||
|
divs->count++;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
divs[count] = 0;
|
|
||||||
|
printf("\tsearching for scm divisors\n");
|
||||||
|
|
||||||
|
gen_scms(divs->divs, &(divs->count), &(divs->pos_count));
|
||||||
return divs;
|
return divs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//4174379265
|
||||||
|
|
||||||
|
|
||||||
|
//4174601487
|
||||||
|
//4174601487
|
||||||
|
//4174823709
|
||||||
|
//4174823709
|
||||||
|
//4174823709
|
||||||
uint64_t check_range(uint64_t start, uint64_t end){
|
uint64_t check_range(uint64_t start, uint64_t end){
|
||||||
|
printf("Range %lu - %lu\n", start, end);
|
||||||
int num = numPlaces(start);
|
int num = numPlaces(start);
|
||||||
uint64_t res = 0;
|
uint64_t res = 0;
|
||||||
for(int i = 2; i<num+1; i++){
|
printf("Finding Divs:\n");
|
||||||
if(!(num%i)){
|
divisors* divs = find_divs(num);
|
||||||
uint64_t div = gen_div(i, num/i);
|
printf("Checking Divs:\n");
|
||||||
|
for(int i = 0; i<divs->count; i++){
|
||||||
|
uint64_t div = divs->divs[i];
|
||||||
|
//uint64_t div = gen_div(i, num/i);
|
||||||
uint64_t a = ((start+div-1)/div);
|
uint64_t a = ((start+div-1)/div);
|
||||||
uint64_t b = (end)/div;
|
uint64_t b = (end)/div;
|
||||||
//uint64_t sum = sumup(a, b);
|
//uint64_t sum = sumup(a, b);
|
||||||
uint64_t sum = sumup_gauss(a, b);
|
uint64_t sum = sumup_gauss(a, b);
|
||||||
printf("Range %lu - %lu\ni = %d\ndiv: %lu\nsumup: \t%lu\n\n", start, end, i, div, sum*div);
|
if(i<divs->pos_count){
|
||||||
|
|
||||||
res += sum*div;
|
res += sum*div;
|
||||||
}
|
}
|
||||||
|
else{
|
||||||
|
res -= sum*div;
|
||||||
}
|
}
|
||||||
|
printf("div: %lu\nsumup: \t%lu\ncount: \t%lu\n", div, sum*div, res);
|
||||||
|
}
|
||||||
|
printf("=============================================================\n");
|
||||||
|
free(divs->divs);
|
||||||
|
free(divs);
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue