#include #include #include #define LIMIT 1000000000 int isPrime ( int n ) { int d, m; m = sqrt(n); for (d = 2; d <= m; ++d) { if (n % d == 0) return 0; } return 1; } int genLarger ( int n, int maxn ) { int m, N; m = maxn; if (isPrime(n)) { if (n > maxn) m = n; if (n < LIMIT / 10) { N = genLarger(10*n+1,m); if (N > m) m = N; N = genLarger(10*n+3,m); if (N > m) m = N; N = genLarger(10*n+7,m); if (N > m) m = N; N = genLarger(10*n+9,m); if (N > m) m = N; } } return m; } int main () { int m, maxn; maxn = 0; m = genLarger(2,maxn); if (m > maxn) maxn = m; m = genLarger(3,maxn); if (m > maxn) maxn = m; m = genLarger(5,maxn); if (m > maxn) maxn = m; m = genLarger(7,maxn); if (m > maxn) maxn = m; printf("Largest truncatable prime = %d\n", maxn); exit(0); }