Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
63
Task/Truncatable-primes/C/truncatable-primes-1.c
Normal file
63
Task/Truncatable-primes/C/truncatable-primes-1.c
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#define MAX_PRIME 1000000
|
||||
char *primes;
|
||||
int n_primes;
|
||||
|
||||
/* Sieve. If we were to handle 10^9 range, use bit field. Regardless,
|
||||
* if a large amount of prime numbers need to be tested, sieve is fast.
|
||||
*/
|
||||
void init_primes()
|
||||
{
|
||||
int j;
|
||||
primes = malloc(sizeof(char) * MAX_PRIME);
|
||||
memset(primes, 1, MAX_PRIME);
|
||||
primes[0] = primes[1] = 0;
|
||||
int i = 2;
|
||||
while (i * i < MAX_PRIME) {
|
||||
for (j = i * 2; j < MAX_PRIME; j += i)
|
||||
primes[j] = 0;
|
||||
while (++i < MAX_PRIME && !primes[i]);
|
||||
}
|
||||
}
|
||||
|
||||
int left_trunc(int n)
|
||||
{
|
||||
int tens = 1;
|
||||
while (tens < n) tens *= 10;
|
||||
|
||||
while (n) {
|
||||
if (!primes[n]) return 0;
|
||||
tens /= 10;
|
||||
if (n < tens) return 0;
|
||||
n %= tens;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int right_trunc(int n)
|
||||
{
|
||||
while (n) {
|
||||
if (!primes[n]) return 0;
|
||||
n /= 10;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int n;
|
||||
int max_left = 0, max_right = 0;
|
||||
init_primes();
|
||||
|
||||
for (n = MAX_PRIME - 1; !max_left; n -= 2)
|
||||
if (left_trunc(n)) max_left = n;
|
||||
|
||||
for (n = MAX_PRIME - 1; !max_right; n -= 2)
|
||||
if (right_trunc(n)) max_right = n;
|
||||
|
||||
printf("Left: %d; right: %d\n", max_left, max_right);
|
||||
return 0;
|
||||
}
|
||||
1
Task/Truncatable-primes/C/truncatable-primes-2.c
Normal file
1
Task/Truncatable-primes/C/truncatable-primes-2.c
Normal file
|
|
@ -0,0 +1 @@
|
|||
Left: 998443; right: 739399
|
||||
47
Task/Truncatable-primes/C/truncatable-primes-3.c
Normal file
47
Task/Truncatable-primes/C/truncatable-primes-3.c
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
#include <stdio.h>
|
||||
|
||||
#define MAXN 1000000
|
||||
int maxl, maxr;
|
||||
|
||||
int is_prime(int n)
|
||||
{
|
||||
int p;
|
||||
if (n % 3 == 0) return 0;
|
||||
|
||||
for (p = 6; p * p <= n; p += 6)
|
||||
if (!(n % (p + 1) && n % (p + 5)))
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
void left(int n, int tens)
|
||||
{
|
||||
int i, nn;
|
||||
|
||||
if (n > maxl) maxl = n;
|
||||
if (n < MAXN / 10)
|
||||
for (tens *= 10, i = 1; i < 10; i++)
|
||||
if (is_prime(nn = i * tens + n))
|
||||
left(nn, tens);
|
||||
}
|
||||
|
||||
void right(int n)
|
||||
{
|
||||
int i, nn;
|
||||
static int d[] = {1,3,7,9};
|
||||
|
||||
if (n > maxr) maxr = n;
|
||||
if (n < MAXN / 10)
|
||||
for (i = 1; i < 4; i++)
|
||||
if (is_prime(nn = n * 10 + d[i])) right(nn);
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
left(3, 1); left(7, 1);
|
||||
right(3); right(5); right(7);
|
||||
|
||||
printf("%d %d\n", maxl, maxr);
|
||||
|
||||
return 0;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue