Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
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;
}
Ejemplo n.º 3
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;
}
Ejemplo n.º 4
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;
}