int main(int argc, char *argv[]) { int *prs, pr_len; int rv, i, num, is_cp; int ncircular; /* get primes below target */ rv = primes_under(TARGET_MAX, &prs, &pr_len); if (rv) errx(1, "fail primes_under"); /* find circular prime */ ncircular = 0; for (i = 0; i < pr_len; i++) { is_cp = 1; num = rotation(prs[i]); while (num != prs[i]) { if (search(num, prs, pr_len) < 0) { /* rotation numbe is not prime */ is_cp = 0; break; } num = rotation(num); } if (is_cp) ncircular++; } printf("%d\n", ncircular); return 0; }
int main(int argc, char *argv[]) { int *pr_arr, pr_len, n_found; int max = 1; /* max number of prime search. this grows '*10' */ int i, tmp; long sum; n_found = 0; sum = 0L; tmp = 4; /* for skip 2,3,5,7 */ while (1) { /* we grow search range to 10,100,1000.. */ max *= 10; if (primes_under(max, &pr_arr, &pr_len)) errx(1, "fail primes_under(%d)", max); for (i = tmp; i < pr_len; i++) { if (special(pr_arr[i], pr_arr, pr_len)) { sum += pr_arr[i]; n_found++; if (n_found == NEED_NFOUND) break; /* out to for-loop */ } } if (n_found == NEED_NFOUND) break; /* out to while-loop */ tmp = pr_len; /* skip already checked for next loop */ free(pr_arr); } printf("%ld\n", sum); return 0; }
int main (int argc, char ** argv) { if (argc != 2) { fprintf (stderr, "usage: %s <N>\n", argv[0]); return 1; } int N = atoi (argv[1]); if (N <= 4) { printf ("0\n"); return 0; } int max_factor = (N - 1) / 2; size_t primes_count = 0; int * primes = primes_under (NULL, max_factor + 1, &primes_count); int count = 0; for (size_t i = 0; i < primes_count; i++) { int largest_factor = (N - 1) / primes[i]; if (largest_factor < primes[i]) break; size_t pi = find_largest_prime (primes, i, primes_count - 1, largest_factor); count += pi - i + 1; } printf ("%d\n", count); free (primes); return 0; }
int main(int argc, char *argv[]) { int a, b, c; int *primes, nprime; int rv; /* get all primes under 10000 */ rv = primes_under(10000, &primes, &nprime); if (rv) errx(1, "fail primes_under()"); /* skip primes under 1000 */ for (a = 0; primes[a] < 1000; a++); for (; a < nprime; a++) { for (b = a + 1; b < nprime; b++) { c = primes[b] + (primes[b] - primes[a]); if (search(c, primes, nprime) == -1) { /* if c is not prime, skip it */ continue; } if (same_digs(primes[a], primes[b]) && same_digs(primes[b], c)) { if (primes[a] != 1487) /* found answer, go out */ goto out; } } } out: printf("%d%d%d\n", primes[a], primes[b], c); free(primes); /* free prime array at heap */ return 0; }