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; }
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; } } } }
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); }
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; }
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; }
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; }
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; }
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); }
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'; }
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; }
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"; }
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; }
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; }
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; }