Beispiel #1
0
int main(int argc, char *argv[])
{
  /* n记录斐波那契额数的下标 */
  long f1, f2, fn, n;double t;
  f1 = 1; f2 = 1; n = 3;


  while(1) {
    /* 以下的一些运算说明见上文 */

    fn = f1 + f2;
    f1 = f2 % get9digits;
    f2 = fn % get9digits;

    /*          log(phi)               log(sqrt(5)/5)  */
    t = n * 0.20898764024997873 + (-0.3494850021680094);
    
    /* 这里已经令f2 = fn了 */
    if (isPandigital(f2) 
	&& /*                        取t的小数部分   */
	isPandigital( (int)( pow(10.0, t - (int)t  + 8) ) )
	)
      break;    
    n++;
  }

  printf("%d\n", n);

  return 0;
}
Beispiel #2
0
int32 problem104() {
  BigInteger f1(1);
  BigInteger f2(1);
  int32 k = 2;
  string front = "123456789";
  string back = "123456789";
  while (true) {
    k++;
    BigInteger temp = f1 + f2;
    f1 = f2;
    f2 = temp;
    if (temp.numberOfDigits() < 18) {
      continue;
    }

    for (int32 i = 0; i < 9; i++) {
      back[i] = temp.getNthDigitFromRight(i) + '0';
    }
    if (isPandigital(back)) {
      for (int32 i = 0; i < 9; i++) {
        front[i] = temp.getNthDigitFromLeft(i) + '0';
      }
      if (isPandigital(front)) {
        return k;
      }
    }
  }
}
Beispiel #3
0
int main()
{
  int mask[10];
  memset(mask, 0, sizeof(mask));
  mask[0] = 1; // no zeroes allowed.
  int i, k, j, l, m;
  int temp = 0; 
  long int sum = 0; 
  
  for (i=1;i < 10; i++)
  {
    mask[i] = 1;
    for (k=1; k < 10; k++)
    {
      if (mask[k]) continue;
      mask[k] = 1;
      for (j=1; j<10; j++)
      {
        if (mask[j]) continue;
        mask[j] = 1;
        for (l=1; l<10; l++)
        {
          if (mask[l]) continue;
          mask[l] = 1;
          for (m=1; m<10; m++)
          {
            if (mask[m]) continue;
            mask[m] = 1;
            temp = (i*10+k)*(j*100+l*10+m);
            if (isPandigital(temp,mask)) {sum += temp; printf("%d * %d = %d\n",(i*10+k),(j*100+l*10+m),temp);}
            temp = (i)*(k*1000 + j*100+l*10+m);
            if (isPandigital(temp,mask)) {sum += temp; printf("%d * %d = %d\n",(i),(k*1000 + j*100+l*10+m),temp);}
            mask[m] = 0;
          }

          mask[l] = 0;
        }

        mask[j] = 0;
      }
      mask[k] = 0;
      
    }
    mask[i] = 0;    
  }
  
  printf("Sum: %ld\n",sum);
}
Beispiel #4
0
Datei: 32.c Projekt: Ballaw/MyBin
int64_t Euler_32()
{

    int a, b, c, alist[50], dex, sum;
    int counter = 1;
    for (c = 1000; c < 10000; c++) {
        for (a = 2; a < 100; a++) {
            if (c % a != 0) {
                continue;
            } else {
                b = c / a;
            }
            if ((a < 10) && (b < 1000)) {
                continue;
            } else {
                if (isPandigital(a, b, c) != 0) {
                    alist[counter] = c;
                    counter++;
                }
            }

        }
    }
    sum = 0;
    for (dex = 1; dex < counter; dex++) {
        if (alist[dex] != alist[dex - 1]) {
            sum += alist[dex];
        }
    }
    return (int64_t) sum;
}
int main(){

	uint r = 0;
		
	for(uint i = 1; i < 10000; i++){
		for(uint j = 2; j < 10; j++){
			string s = "";
			for(uint k = 1; k < j; k++){
				s += intToString(i * k);
			}
			if(s.size() > 9)
				break;

			if(s.size() == 9 && isPandigital(stoi(s), 1, 9))
				if((uint)stoi(s) > r){
					r = stoi(s); 
				}
		}
	}
	
	cout << r << endl;

	return 0;

}
Beispiel #6
0
int main() {
	int i;
	for (i=7654321; i>=1234567; i-=2) {
		if (isPandigital(i)) {
			if (isPrime(i)) {
				printf ("The largest pandigital prime is: %d\n", i);
				break;
			}
		}
	}
	return 0;
}
Beispiel #7
0
int main(){
    unsigned long i = 0;

    for(i=FIRST_NBRE; i>=LAST_NBRE; i-=2){
	if(isPandigital(i)){
	    if(isPrime(i)){
		printf("%ld\n", i);
		return 0;
	    }
	}
    }
    return 0;
} 
Beispiel #8
0
int main() {
  int temp = 0, answer = 0;
  
  for (int i = 9876; i > 9200; --i) {
    temp = i * 100000 + i * 2;
    if (isPandigital(temp)) {
      answer = temp;
      break;
    }
  }
  
  std::cout << "The answer is " << answer << std::endl;
  return 0;
}
Beispiel #9
0
void calc(int seed)
{
    char bigBuffer[256] = "";
    char buffer[20];
    unsigned int multiple = 1;
    while (strlen(bigBuffer) < 9)
    {
        sprintf(buffer, "%d", seed * multiple);
        strcat(bigBuffer, buffer);
        multiple++;
    }
    if (strlen(bigBuffer) == 9)
        if (isPandigital(bigBuffer))
            printf("%s : seed=%d n=%d\n", bigBuffer, seed - 1, multiple);
}
Beispiel #10
0
int main(int argc, char **argv)
{
	const long MAX_NUM = boost::lexical_cast<long>(argv[1]);

	//Error checking
	if(argc > 2)
	{
		std::cerr << " >> ERROR: Too many arguments" << std::endl;
		return 1;
	}
	if(MAX_NUM < 0)
	{
		std::cerr << " >> ERROR: Argument must be positive or zero" << std::endl;
		return 1;
	}

	boost::dynamic_bitset<> numList(MAX_NUM + 1);
	numList.flip();
	long index = 1, step = 0;

	//Sieve
	while((index * index) <= MAX_NUM)
	{
		index++;
		if(numList[index] == 0)
		{
			continue;
		}
		step = (index > 2) ? 2 * index : index;
		for(long i = index * index; i <= MAX_NUM; i += step)
		{
			numList[i] = 0;
		}
	}

	//Output results
	for(long i = 2; i <= MAX_NUM; ++i)
	{
		if(numList[i] && isPandigital(i))
		{
			std::cout << i << '\n';
		}
	}
	return 0;
}
int main()
{
    std::set<int> products;

    for (int a = 1; a <= 9876; a++)
    {
        for (int b = a; b <= 9876; b++)
        {
            int l = len(a) + len(b) + len(a * b);
            if (l > 9)
                break;
            if (l == 9 && isPandigital(a, b, a * b))
                products.insert(a * b);
        }
    }

    std::cout << std::accumulate(products.begin(), products.end(), 0) << '\n';
}
Beispiel #12
0
int main(void)
{
	// 31427 = ceil(sqrt(987654321)), max necessary prime divisor
	Primes primes = precomputePrimes(5000, 31427);
	
	
//	printf("Max prime: %d, count: %d", primes.p[primes.num-1], primes.num);
	
	int i;
	for (i = 1; i < 9876543; i++)
	{
		if (isPandigital(i) && isPrime(i, primes))
		{
			printf("%d ", i);
		}
	}
	
	return 0;
}
Beispiel #13
0
int main()
{
    std::set<int> products;
    for (int i = 2; i < 9999; i++) {
        for (int j = 2; j < 9999; j++) {
            int k = i*j;
            int digitsI[10];
            int digitsJ[10];
            int digitsK[10];
            int numDigitsI = fillDigits(i, digitsI);
            int numDigitsJ = fillDigits(j, digitsJ);
            int numDigitsK = fillDigits(k, digitsK);
            int nDigits = numDigitsI + numDigitsJ + numDigitsK;
            if (nDigits < 9)
                continue; // jump to next in the inner loop
            if (nDigits > 9)
                break; // jump to next in outer loop

            // we have nine digits, see if the identity is pandigital
            // stuff all in same array
            int digits[10];
            int numDigits = 0;
            numDigits = stuffArray(numDigits, digits, numDigitsI, digitsI);
            numDigits = stuffArray(numDigits, digits, numDigitsJ, digitsJ);
            numDigits = stuffArray(numDigits, digits, numDigitsK, digitsK);

            if (isPandigital(numDigits, digits)) {
                std::cout << "i " << i << " j " << j << " k " << k << " numDigits " << numDigits << "\n";
                products.insert(k);
            }
        }
    }

    
    std::cout << "unique products: " << "\n";
    int sum = 0;
    for (std::set<int>::const_iterator i = products.begin(); i != products.end(); ++i) {
        sum += *i;
        std::cout << *i << "\n";
    }
    std::cout << "sum: " << sum << "\n";
}
Beispiel #14
0
int32 problem38() {
  // We are given that 9 x (1,2,3,4,5) = 918273645, a 1-9 pandigital number.
  // So our number must begin with a 9 if it is larger. One digit numbers other
  // than 9 won't create a concatenated product starting with a 9. A two digit
  // number starting with 9 will have a concatenated product whose size is
  // 2 -> 5 -> 8 -> 11 -> ... so it cannot work. Similarly for 3-digit numbers
  // and 5-digit and larger numbers. So our concatenated product is formed by
  // a 4-digit integer starting with 9 and (1,2) if it is larger than 918273645.
  // Otherwise, 918273645 is the largest. So we check all 4-digit numbers
  // beginning with 9.
  int32 largest = 918273645;
  for (int32 i = 9000; i < 10000; i++) {
    int32 concatenatedProduct = i * 100000 + 2 * i;
    if (concatenatedProduct > largest && isPandigital(concatenatedProduct)) {
      largest = concatenatedProduct;
    }
  }

  return largest;
}
Beispiel #15
0
uint64_t e032(){
    std::set<uint64_t> products;
    uint64_t sum = 0;

    for(uint32_t i = 2; i < 99; ++i){
        for(uint32_t j = 123; j < 9876 / 2; ++j){
            if(i < 10 && j < 1000) continue;

            uint64_t product = i * j;
            if(product > 9876) break;

            if(isPandigital(i, j, product))
                products.insert(product);
        }
    }

    for(auto it = products.begin(); it != products.end(); ++it)
        sum += *it;

    return sum;
}
Beispiel #16
0
std::string Problem038::get_answer() {
    int highest = 0;
    for (int i = 1; i < 10000; ++i) {
        std::string result = "";
        for (int j = 1; ; ++j) {
            result += std::to_string(i * j);
            if (result.size() > 9) {
                break;
            }
            if (result.size() == 9) {
                if (isPandigital(result)) {
                    if (atoi(result.c_str()) > highest) {
                        highest = atoi(result.c_str());
                    }
                }
                break;
            }
        }
    }
    return std::to_string(highest);
}
int main()
{
   int max = 0;

   for(int i = 1; i < 10000; ++i)
   {
      std::string tmp = "";
      for(int j = 1; tmp.size() < 10; ++j)
      {
         std::stringstream ss;
         ss << i * j;
         tmp += ss.str();

         if(isPandigital(tmp))
            if( max < atoi(tmp.c_str())) 
               max = atoi(tmp.c_str());
      }
   }

   std::cout << "Answer: " << max << std::endl;

   return 0;
}