示例#1
0
文件: 012.c 项目: jebaum/euler
int main()
{
  int tNum = 1, nNum = 1, divisors = 0, tNum2, exponent, i;
  uint64_t* p = malloc(sizeof(uint64_t));
  *p = 65500;
  uint64_t* primes = sievePrimes(p);

  while (divisors <= 500)
  {
    nNum++; // next natural number
    tNum2 = tNum+=nNum; // next triangle number
    divisors = 1; // so we can *=

    for (i=0; i<*p; ++i)
    {
      if (primes[i]*primes[i] > tNum2) // current prime greater than sqrt(tNum), so it's last divisor and has multiple 1
      {
        divisors*=2; // whatever it is, it'll multiply everything by (1+1)==2. don't need to actually find it
        break;
      }

      exponent = 1; // formula is (a_1+1)*(a_2+1)...(a_n+1), so start with the +1
      while (tNum2 % primes[i] == 0)
      {
        ++exponent;
        tNum2 /= primes[i];
      }
      if (exponent>1)
        divisors *= exponent; // multiply next term in formula

      if (tNum2 == 1) // check if we've fully factored our number
        break;
    }
  }
  printf("answer is %d\n", tNum);
}
示例#2
0
int main(){
	uint64_t* P = sievePrimes(1000000);
	free(P);
	return 0;
}