mostly implemented, things get counted double
This commit is contained in:
parent
8d6b76e940
commit
c943fdcdf7
1 changed files with 33 additions and 20 deletions
53
2_2/main.c
53
2_2/main.c
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
char input[] =
|
char input[] =
|
||||||
{
|
{
|
||||||
#embed "input.txt"
|
#embed "input-.txt"
|
||||||
,'\0' // null terminator
|
,'\0' // null terminator
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -51,19 +51,15 @@ uint64_t power(uint64_t base, uint64_t exp) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool check_silly(uint64_t in){
|
uint64_t gen_div(int len, int spacing){
|
||||||
int num = numPlaces(in);
|
uint64_t div = 0;
|
||||||
|
for(int i = 0; i<len; i++){
|
||||||
if(!(num%2)){
|
div += power(10, i*spacing);
|
||||||
uint64_t div = 1+power(10, num/2);
|
|
||||||
//printf("check dividend is %d\n", div);
|
|
||||||
if(in%div == 0){
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return false;
|
return div;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void sort_ranges(uint64_t* starts, uint64_t* ends, int len){
|
void sort_ranges(uint64_t* starts, uint64_t* ends, int len){
|
||||||
int curr_min = 0;
|
int curr_min = 0;
|
||||||
for(int i = 0; i<len-1; i++){
|
for(int i = 0; i<len-1; i++){
|
||||||
|
|
@ -117,19 +113,36 @@ 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){
|
||||||
|
int* divs = calloc(num, sizeof(int));
|
||||||
|
int count = 0;
|
||||||
|
for(int i = num+1; i>=2; i--){
|
||||||
|
if(!(num%i)){
|
||||||
|
divs[count] = i;
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
divs[count] = 0;
|
||||||
|
return divs;
|
||||||
|
}
|
||||||
|
|
||||||
uint64_t check_range(uint64_t start, uint64_t end){
|
uint64_t check_range(uint64_t start, uint64_t end){
|
||||||
int num = numPlaces(start);
|
int num = numPlaces(start);
|
||||||
if(!(num%2)){
|
uint64_t res = 0;
|
||||||
uint64_t div = 1+power(10, num/2);
|
for(int i = 2; i<num+1; i++){
|
||||||
uint64_t a = ((start+div-1)/div);
|
if(!(num%i)){
|
||||||
uint64_t b = (end)/div;
|
uint64_t div = gen_div(i, num/i);
|
||||||
//uint64_t sum = sumup(a, b);
|
uint64_t a = ((start+div-1)/div);
|
||||||
uint64_t sum = sumup_gauss(a, b);
|
uint64_t b = (end)/div;
|
||||||
//printf("Range %lu - %lu\nsumup: \t%lu\nsumup_gauss: \t%lu\n\n", start, end, sum, sum2);
|
//uint64_t sum = sumup(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);
|
||||||
|
|
||||||
|
res += sum*div;
|
||||||
|
}
|
||||||
|
|
||||||
return sum*div;
|
|
||||||
}
|
}
|
||||||
return 0;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[]){
|
int main(int argc, char *argv[]){
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue