int main() { bi_initialize(); int k = 2; bigint f1 = int_to_bi(1), f2 = int_to_bi(1), f3, tmp; bigint zeros = int_to_bi(1000000000); while (1) { k++; f3 = bi_add(f1, bi_copy(f2)); int mod = bi_int_mod(bi_copy(f3), 1000000000); if (mod >= 100000000) { if (is_pandigital(mod)) { tmp = bi_copy(f3); while (bi_compare(bi_copy(tmp), bi_copy(zeros)) > 0) { tmp = bi_int_divide(tmp, 10); } if (is_pandigital(bi_to_int(tmp))) { break; } } } f1 = f2; f2 = f3; } bi_free(f2); bi_free(f3); bi_free(zeros); printf("%d\n", k); bi_terminate(); return 0; }
int main() { bi_initialize(); bigint sum = int_to_bi(1); bigint last = int_to_bi(1); int i, j; for (i = 1; i <= (SIZE-1)/2; ++i) { for (j = 0; j < 4; ++j) { last = bi_add(last, bi_int_multiply(int_to_bi(i), 2)); sum = bi_add(sum, bi_copy(last)); } } bi_print(stdout, sum); printf("\n"); bi_free(last); bi_terminate(); return 0; }
int main() { bi_initialize(); int a, b, n; int max_number, prod; for (a = -999; a < 1000; ++a) { for (b = -999; b < 1000; ++b) { n = 0; for (;;) { bigint a_ = int_to_bi(a); bigint b_ = int_to_bi(b); bigint n_ = int_to_bi(n); bigint n2 = bi_multiply( bi_copy( n_ ), bi_copy( n_ ) ); bigint an = bi_multiply(bi_copy(a_),bi_copy(n_)); bigint num = bi_add(bi_copy(n2), bi_copy(an)); bigint num2 = bi_add(bi_copy(num), bi_copy(b_)); int should_break = 0; if (bi_is_probable_prime(bi_copy(num2), 99)) { ++n; } else { if (n > max_number) { max_number = n; prod = a * b; } should_break = 1; } bi_free(num); bi_free(num2); bi_free(a_); bi_free(b_); bi_free(n_); bi_free(n2); bi_free(an); if (should_break) break; } } } printf("%d\n", prod); bi_terminate(); return 0; }
int main() { bi_initialize(); bigint last = int_to_bi(1); int i, j; int number_of_primes = 0; for (i = 1;; ++i) { for (j = 0; j < 4; ++j) { last = bi_add(last, bi_int_multiply(int_to_bi(i), 2)); if (j != 3 && bi_is_probable_prime(bi_copy(last), 4)) { ++number_of_primes; } } if ((double)number_of_primes / (4*i+1) < 0.1) { printf("%d\n", i*2+1); break; } #ifdef DEBUG printf("%d/%d on iteration %d ~%f\n", number_of_primes, (4*i+1), i, (float)number_of_primes/(4*i+1)); #endif } bi_free(last); bi_terminate(); return 0; }
/** * @brief Perform a modular exponentiation. * * This function requires bi_set_mod() to have been called previously. This is * one of the optimisations used for performance. * @param ctx [in] The bigint session context. * @param bi [in] The bigint on which to perform the mod power operation. * @param biexp [in] The bigint exponent. * @return The result of the mod exponentiation operation * @see bi_set_mod(). */ bigint * ICACHE_FLASH_ATTR bi_mod_power(BI_CTX *ctx, bigint *bi, bigint *biexp) { int i = find_max_exp_index(biexp), j, window_size = 1; bigint *biR = int_to_bi(ctx, 1); #if defined(CONFIG_BIGINT_MONTGOMERY) uint8_t mod_offset = ctx->mod_offset; if (!ctx->use_classical) { /* preconvert */ bi = bi_mont(ctx, bi_multiply(ctx, bi, ctx->bi_RR_mod_m[mod_offset])); /* x' */ bi_free(ctx, biR); biR = ctx->bi_R_mod_m[mod_offset]; /* A */ } #endif check(bi); check(biexp); #ifdef CONFIG_BIGINT_SLIDING_WINDOW for (j = i; j > 32; j /= 5) /* work out an optimum size */ window_size++; /* work out the slide constants */ precompute_slide_window(ctx, window_size, bi); #else /* just one constant */ ctx->g = (bigint **)SSL_MALLOC(sizeof(bigint *)); ctx->g[0] = bi_clone(ctx, bi); ctx->window = 1; bi_permanent(ctx->g[0]); #endif /* if sliding-window is off, then only one bit will be done at a time and * will reduce to standard left-to-right exponentiation */ do { if (exp_bit_is_one(biexp, i)) { int l = i-window_size+1; int part_exp = 0; if (l < 0) /* LSB of exponent will always be 1 */ l = 0; else { while (exp_bit_is_one(biexp, l) == 0) l++; /* go back up */ } /* build up the section of the exponent */ for (j = i; j >= l; j--) { biR = bi_residue(ctx, bi_square(ctx, biR)); if (exp_bit_is_one(biexp, j)) part_exp++; if (j != l) part_exp <<= 1; } part_exp = (part_exp-1)/2; /* adjust for array */ biR = bi_residue(ctx, bi_multiply(ctx, biR, ctx->g[part_exp])); i = l-1; } else /* square it */ { biR = bi_residue(ctx, bi_square(ctx, biR)); i--; } } while (i >= 0); /* cleanup */ for (i = 0; i < ctx->window; i++) { bi_depermanent(ctx->g[i]); bi_free(ctx, ctx->g[i]); } SSL_FREE(ctx->g); bi_free(ctx, bi); bi_free(ctx, biexp); #if defined CONFIG_BIGINT_MONTGOMERY return ctx->use_classical ? biR : bi_mont(ctx, biR); /* convert back */ #else /* CONFIG_BIGINT_CLASSICAL or CONFIG_BIGINT_BARRETT */ return biR; #endif }
int is_prime(int num) { return bi_is_probable_prime(int_to_bi(num), 9); }
int main() { bi_initialize(); bigint sum = int_to_bi(0); int a,b,c,d,e,f,g,h,i,j; int n; for (a=9;a>0;--a) { for (b=9;b>=0;--b) { if (b==a) continue; for (c=9;c>=0;--c) { if (c==a||c==b) continue; for (d=9;d>=0;--d) { if (d==a||d==b||d==c) continue; for (e=9;e>=0;--e) { if (e==a||e==b||e==c||e==d) continue; for (f=9;f>=0;--f) { if (f==a||f==b||f==c||f==d||f==e) continue; for (g=9;g>=0;--g) { if (g==a||g==b||g==c||g==d||g==e||g==f) continue; for (h=9;h>=0;--h) { if (h==a||h==b||h==c||h==d||h==e||h==f||h==g) continue; for (i=9;i>=0;--i) { if (i==a||i==b||i==c||i==d||i==e||i==f||i==g||i==h) continue; for (j=9;j>=0;--j) { if (j==a||j==b||j==c||j==d||j==e||j==f||j==g||j==h||j==i) continue; if ((b * 100 + c * 10 + d) % 2 == 0) if ((c * 100 + d * 10 + e) % 3 == 0) if ((d * 100 + e * 10 + f) % 5 == 0) if ((e * 100 + f * 10 + g) % 7 == 0) if ((f * 100 + g * 10 + h) % 11 == 0) if ((g * 100 + h * 10 + i) % 13 == 0) if ((h * 100 + i * 10 + j) % 17 == 0) { n = b * 100000000 + c * 10000000 + d * 1000000 + e * 100000 + f * 10000 + g * 1000 + h * 100 + i * 10 + j * 1; sum = bi_add(sum, int_to_bi(n)); sum = bi_add(sum, bi_int_multiply(int_to_bi(1000000000), a)); #ifdef DEBUG printf("%d%d%d%d%d%d%d%d%d%d\n", a,b,c,d,e,f,g,h,i,j); bi_print(stdout,bi_copy(sum)); printf("\n"); #endif } } } } } } } } } } } bi_print(stdout,sum); printf("\n"); bi_terminate(); return 0; }