コード例 #1
0
bool is_sum(int n)
{
    for (int p = 1; p <= n/2; p++)
        if (is_abundant(p) && is_abundant(n-p))
            return true;
    return false;
}
コード例 #2
0
ファイル: prob23.c プロジェクト: keeslinp/DailyProgrammer
int main(int argc,char* argv[])
{
	clock_t begin, end;
	double time_spent;
	
	begin= clock();
	make_primes(28123);
	int abundants[10000] = {0};
	int* a = abundants-1;
	bool summable[28123]= {false};

	for(int i =0; i < 28123;i++)
		if(is_abundant(i)){*(a++)=i;}
	for(int i = 0; i <= a-abundants;i++)
	{
		for(int j = i; j<= a-abundants;j++)
		{
			if(abundants[i]+abundants[j] > 28123)break;
			summable[abundants[i]+abundants[j]]=true;
		}
	}
	int sum = 0;
	for(int i =0;i < 28123;i++)
		if(!summable[i])
			sum+=i;
	printf("%d\n",sum);
	end = clock();
	time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
	printf("Time Taken: %f\n",time_spent);		
	return 0;
}
コード例 #3
0
ファイル: prob_23.c プロジェクト: peterbb/euler
int 
main(int argc, char** argv)
{
    int i, j;
    unsigned long long sum;

    for  (i = 1; i <= MAX; i++) {
        abundant[i] = is_abundant(i);
    }

    for (i = 1; i <= MAX; i++) {
        if (!abundant[i]) 
            continue;
        for (j = 1; j <= MAX; j++) {
            if (!abundant[j])
                continue;
            if (i + j <= MAX)
                is_sum_of_abundant[i + j] = 1;
        }
    }

    sum = 0;
    for (i = 1; i <= MAX; i++) {
        if (!is_sum_of_abundant[i]) 
            sum += i;
    }

    printf("%llu\n", sum);

    return 0;
}
コード例 #4
0
ファイル: main.cpp プロジェクト: NFA/euler
std::vector<int> get_abundant_numbers(int max) {
  std::vector<int> ret;
  for (int i = 1; i <= max; ++i) {
    if (is_abundant(i))
      ret.push_back(i);
  }
  return ret;
}
コード例 #5
0
ファイル: p23.c プロジェクト: strwbrry/projecteuler
int main()
{
        int abundant_count;
        int *abundant_numbers;
        int numbers[MAX+1] = { 0 };
        int i, c, k, sum;
        int present;

        // count abundant numbers
        abundant_count = 0;
        for (i = 1; i < MAX; i++) {
                if (is_abundant(i))
                        abundant_count++;
        }
        abundant_numbers = malloc(abundant_count * sizeof(int));

        // store abundant numbers
        k = 0;
        for (i = 1; i < MAX; i++) {
                if (is_abundant(i))
                        abundant_numbers[k++] = i;
        }

        // mark integers that CAN be written
        // as the sum of two abundant numbers
        for (i = 0; i < abundant_count; i++) {
                for (k = i; k < abundant_count; k++) {
                        sum = abundant_numbers[i] + abundant_numbers[k];
                        if (sum <= MAX)
				numbers[sum] = 1;	
			else
				break;
                }
        }

        // sum numbers that are not marked in the array
	sum = 0;
	for (i = 1; i <= MAX; i++)
		if (!numbers[i])
			sum += i; 

	printf("%d", sum);
        return 0;
}
コード例 #6
0
ファイル: prob23.c プロジェクト: hugobenichi/doodles
int main(void)
{
  
  int i, j, sum, lim = 28124;
  
  int* abundant        = malloc( sizeof(int) * lim );
  int* abundant_notsum = malloc( sizeof(int) * lim ); 
  
  i = 1;
  while(lim-i)
  {
    abundant[i] = is_abundant(i);
    abundant_notsum[i] = 1;
    i++;
  }
  
  i = 1;
  while(lim-i)
  {
    if( abundant[i] ) 
    {    
      j = 1;
      while(lim-j)
      {
        if( abundant[j] && (i+j < lim) )
          abundant_notsum[i+j] = 0;       
        j++;
      }        
    }
    i++;
  }
  
  sum = 0;
  i = 1;
  while(lim-i)
  {
    if ( abundant_notsum[i] )
      sum += i;
    i++;
  }
  
  printf("%i\n", sum);
  
  free(abundant);
  free(abundant_notsum);
    
  exit(0);
}
コード例 #7
0
ファイル: main.c プロジェクト: cvpcs/project_euler
uint32_t* abundants(uint32_t min, uint32_t max) {
	const size_t BBS = 32;
	size_t bbc = 1;

	uint32_t* abundants = calloc(bbc * BBS, sizeof(uint32_t));

	uint32_t c = 0;
	for (uint32_t i = min; i <= max; i++) {
		if (is_abundant(i)) {
			abundants[c++] = i;

			if (c >= (bbc * BBS) - 1) {
				abundants = realloc(abundants, ++bbc * BBS * sizeof(uint32_t));
			}
		}
	}

	abundants[c] = 0;
	return abundants;
}
コード例 #8
0
ファイル: twenty-three.c プロジェクト: bzgeb/ProjectEuler
int main()
{
    int abundant_numbers[10000] = {0};
    int abundant_count = 0;

    int i = 0;
    for (i = 0; i < MAX; ++i)
    {
        if (is_abundant(i))
        {
            abundant_numbers[abundant_count] = i; 
            ++abundant_count;
        }
    }

    int sum_of_abundants[MAX * 2 + 1] = {0};

    int j = 0;
    for (i = 0; i < abundant_count; ++i)
    {
        for (j = 0; j < abundant_count; ++j)
        {
            sum_of_abundants[abundant_numbers[i] + abundant_numbers[j]] = 1;
        }
    }

    int result_sum = 0;
    for (i = 1; i < MAX; ++i)
    {
        if (!sum_of_abundants[i])
        {
            result_sum += i;
        }
    }

    printf("%d\n", result_sum);
    return 0;
}
コード例 #9
0
ファイル: main.c プロジェクト: jeissonh/Progra2-14b
int print_properties_num(longnum num)
{
	printf("%llu:\nprime factors: ", num);
	print_prime_factors(num);
	printf("\n");

	if ( is_abundant(num) ) printf(" abundant");
	if ( is_amicable(num) ) printf(" amicable");
	if ( is_apocalyptic_power(num) ) printf(" apocalyptic_power");
	if ( is_aspiring(num) ) printf(" aspiring");
	if ( is_automorphic(num) ) printf(" automorphic");
	if ( is_cake(num) ) printf(" cake");
	if ( is_carmichael(num) ) printf(" carmichael");
	if ( is_catalan(num) ) printf(" catalan");
	if ( is_composite(num) ) printf(" composite");
	if ( is_compositorial(num) ) printf(" compositorial");
	if ( is_cube(num) ) printf(" cube");
	if ( is_deficient(num) ) printf(" deficient");
	if ( is_easy_to_remember(num) ) printf(" easy_to_remember");
	if ( is_ecci1(num) ) printf(" ecci1");
	if ( is_ecci2(num) ) printf(" ecci2");
	if ( is_even(num) ) printf(" even");
	if ( is_evil(num) ) printf(" evil");
	if ( is_factorial(num) ) printf(" factorial");
	if ( is_fermat(num) ) printf(" fermat");
	if ( is_fibonacci(num) ) printf(" fibonacci");
	if ( is_google(num) ) printf(" google");
	if ( is_happy(num) ) printf(" happy");
	if ( is_hungry(num) ) printf(" hungry");
	if ( is_hypotenuse(num) ) printf(" hypotenuse");
	if ( is_lazy_caterer(num) ) printf(" lazy_caterer");
	if ( is_lucky(num) ) printf(" lucky");
	if ( is_mersenne_prime(num) ) printf(" mersenne_prime");
	if ( is_mersenne(num) ) printf(" mersenne");
	if ( is_narcissistic(num) ) printf(" narcissistic");
	if ( is_odd(num) ) printf(" odd");
	if ( is_odious(num) ) printf(" odious");
	if ( is_palindrome(num) ) printf(" palindrome");
	if ( is_palindromic_prime(num) ) printf(" palindromic_prime");
	if ( is_parasite(num) ) printf(" parasite");
	if ( is_pentagonal(num) ) printf(" pentagonal");
	if ( is_perfect(num) ) printf(" perfect");
	if ( is_persistent(num) ) printf(" persistent");
	if ( is_power_of_2(num) ) printf(" power_of_2");
	if ( is_powerful(num) ) printf(" powerful");
	if ( is_practical(num) ) printf(" practical");
	if ( is_prime(num) ) printf(" prime");
	if ( is_primorial(num) ) printf(" primorial");
	if ( is_product_perfect(num) ) printf(" product_perfect");
	if ( is_pronic(num) ) printf(" pronic");
	if ( is_repdigit(num) ) printf(" repdigit");
	if ( is_repunit(num) ) printf(" repunit");
	if ( is_smith(num) ) printf(" smith");
	if ( is_sociable(num) ) printf(" sociable");
	if ( is_square_free(num) ) printf(" square_free");
	if ( is_square(num) ) printf(" square");
	if ( is_tetrahedral(num) ) printf(" tetrahedral");
	if ( is_triangular(num) ) printf(" triangular");
	if ( is_twin(num) ) printf(" twin");
	if ( is_ulam(num) ) printf(" ulam");
	if ( is_undulating(num) ) printf(" undulating");
	if ( is_untouchable(num) ) printf(" untouchable");
	if ( is_vampire(num) ) printf(" vampire");
	if ( is_weird(num) ) printf(" weird");

	printf("\n\n");
	return 0;
}
コード例 #10
0
ファイル: p23.c プロジェクト: mattwollf/pe_solutions
int main(int argc, char *argv[] )
{
	uint16_t *abundant = NULL ;

	size_t abundant_size = 0 ;

	uint16_t i, j, k ;

	uint16_t found_flag ;

	uint32_t sum_2_abundants ;
	uint32_t sum = 1 ;

	/* sum is initialized to 1 because 1 cannot be expressed as a sum of two 	   abundants.*/
	/* fill the array telling if characters are abundant */

	for( i = 12; i < 29000; ++ i )
	{
		if( is_abundant( i ) )
		{
			++ abundant_size ;

			abundant = realloc( (void *) abundant,
					sizeof(uint16_t) * abundant_size ) ;

			abundant[abundant_size - 1] = i ;

#if extra_printing
			printf("adding abundant number %d\n", i );
#endif
		}

	}

#if extra_printing
	printf("beginning search for sums of abundant numbers\n");
#endif

	/* first loop for finding the numbers that cannot be written as hte sum of two nonabundant numbers */

	for(i = 2; i < 28124 ; ++i )
	{
		found_flag = 0 ;

		/* second loop for finding first  abundant number to make sum */
		/* j starts as 1 because 1 is first abundant number */
		for( j = 0;  abundant[j] < i /*&& j < abundant_size*/ ; ++ j )
		{

			if(found_flag == 1) break ;

			/* third loop for finding second abundant number to */
			/* make sum ( i ) */
			for( k = 0; k < abundant_size /*&& abundant[k] < i*/ ; ++k )
			{
				sum_2_abundants = abundant[k] + abundant[j] ;

				if( sum_2_abundants == i )
				{
#if extra_printing
					printf("%d = %d + %d \n"    ,
							i           ,
							abundant[j] ,
							abundant[k] );
#endif
					found_flag = 1 ;

					/*set found flag to break out*/

				}

				else if( sum_2_abundants > i ) break ;
			}
		}

		/* add i to sum if a sum of 2 abundants is not found */

		if(found_flag == 0 ) sum += i ;
	}

	printf("the sum of all numbers which cannot be expressed as a sum of 2 abundant numbers is %d\n", sum );

	return 0;
}
コード例 #11
0
ファイル: eu23.c プロジェクト: Ricardicus/Project-eueler
int main()
{
	linkedlist *abundants = calloc(1,sizeof(linkedlist));
	abundants->next = NULL;
	abundants->data = 0;

	unsigned int i = 1;
	double process = 0;
	unsigned int nbr_of_abundants = 0;

	while(i<MAXVAL)
	{
		if(is_abundant(i))
		{
			add_abundant(abundants,i);
			nbr_of_abundants++;
		}
		process = (double)i/MAXVAL;
		i++;		
	}
	/* Getting rid of the first number in the list wich was 0.. */
	linkedlist * first = abundants->next;

	free(abundants);

	unsigned int * abundantnbrs = calloc(nbr_of_abundants,sizeof(unsigned int));

	i = 0;

	linkedlist *ptr = first;
	while(i<nbr_of_abundants)
	{
		abundantnbrs[i] = ptr->data;
		ptr = ptr->next;
		i++;
	}

	unsigned int u = 28123;
	while(can_be_written_as_sum(abundantnbrs,nbr_of_abundants,u))
	{
		u--;
	}

	int sum = 0;

	i = 0;

	while(i<=u)
	{
		if(!can_be_written_as_sum(abundantnbrs,nbr_of_abundants,i))
		{
			sum += i;
		}
		printf("Process: %i \n",i);
		i++;
	}

	printf("\n\n");
	printf("The answer is: %i\n",sum);

	free_abundants(first);

	
	free(abundantnbrs);

	return 0;
}